Регулярное выражение для извлечения названия телестанции из IPTV - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь извлечь название телевизионной станции из различных форматов телевизионной станции, используемых в списках воспроизведения IPTV M3U. Типы, которые я нашел:

  • NL | NPO 3 FHD HEV C
  • || NL || NPO 3 FHD HEV C
  • NL: NPO 3 FHD HEV C
  • NL: NPO 3 FHD +
  • NL: NPO 3 HD

Теперь я пытаюсь извлечь NPO 3, чтобы я мог сопоставить его с внешним списком с идентификаторами - для назначения TV Guide. Я уверен, что есть и другие типы - но я не могу понять, что мой регулярный оператор работает со всеми из них. Проблема в том, что для голландских станций есть NL, но для других стран есть SE, PL, США.

Я придумаю следующее:

/^\|\||.*\||\|\||:|(.+) FHD+|FHD +|FHD|HD|4K|UHD/i

При использовании этой строки: NL | NPO 3 FHD HEV C это вид работ:

Array
(
    [0] => Array
        (
            [0] => NL|
            [1] =>  NPO 3 FHD
        )

    [1] => Array
        (
            [0] => 
            [1] =>  NPO 3
        )

)
1

При использовании этой строки: NL: NPO 3 FHD HEV C это приводит к:

Array
(
    [0] => Array
        (
            [0] => NL: NPO 3 FHD
        )

    [1] => Array
        (
            [0] => NL: NPO 3
        )

)
1

Я не очень хорошо справляется с регулярными выражениями - и что бы я ни пытался, я не могу заставить его работать со всеми видами форматов.

1 Ответ

1 голос
/ 11 февраля 2020

Если вы хотите извлечь NPO 3 из этих строк, вы можете использовать

^(?:[A-Z]+[|:]|\|\|[A-Z]+\|\|) (\S.*?) (?:FHD \+|FHD\+?|U?HD|4K)

Объяснение

  • ^ Начало строки
  • (?: Группа без захвата
    • [A-Z]+[|:] Совпадение 1+ вхождений AZ, за которыми следуют либо |, либо :
    • | Или
    • \|\|[A-Z]+\|\| Совпадение || 1+ вхождений A- ~ и ||
  • ) Закрытие группы
  • (\S.*?) Совпадение пробела, a не пробельный символ и 0+ раз любой символ
  • (?:FHD \+|FHD\+?|U?HD|4K) Соответствует одной из альтернатив

Regex demo | Php демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...