Этот вопрос следует из предыдущего вопроса о регулярных выражениях If-Then-Else.
Из-за того, как я сформулировал свою проблему в других вопросах, решения не использовали ( ? (A) X | Y) синтаксис. Но я думаю, что мне нужно использовать этот подход.
Вот моя перефразированная проблема ...
Мне нужно регулярное выражение, которое принимает в качестве входных данных строку, представляющую имя файла.
Вот мои тестовые строки ...
The Edge Of Seventeen 2016 720p.mp4
20180511 2314 - Film4 - Northern Soul.ts
20150526 2059 - BBC Four - We Need to Talk About Kevin.ts
Если имя файла соответствует этому регулярному выражению:
\d{8} \d{4} -.*?- .*?\.ts
Тогда следует применить этот RegEx:
\d{8} \d{4} -.*?- ?(.*)\.ts
Если имя файла не соответствует первому регулярному выражению, к нему следует применить это регулярное выражение:
(.*[^ _\,\.\(\)\[\]\-])[ _\.\(\)\[\]\-]+(19[0-9][0-9]|20[0-9][0-9])([ _\,\.\(\)\[\]\-]|[^0-9]$)?
Это ожидаемый результат ...
Тестовая строка: The Edge Of Seventeen 2016 720p.mp4
Ожидаемый результат: «The Edge Of Seventeen 2016» (цитаты включены только для того, чтобы показать, что в конце можно оставить пробел)
Тестовая строка: 20180511 2314 - Film4 - Northern Soul.ts
Ожидаемый результат: Northern Soul
Тестовая строка: 20150526 2059 - BB C Four - нам нужно поговорить о Kevin.ts
Ожидаемый результат: нам нужно поговорить о Kevin
Вот что Я пытался создать регулярное выражение If-Then-Else, но оно не работает:
Я использую этот формат -> (? (A) X | Y)
(?(\d{8} \d{4} -.*?- .*?\.ts)\d{8} \d{4} -.*?- ?(.*)\.ts|(.*[^ _\,\.\(\)\[\]\-])[ _\.\(\)\[\]\-]+(19[0-9][0-9]|20[0-9][0-9])([ _\,\.\(\)\[\]\-]|[^0-9]$)?)
Это A
\d{8} \d{4} -.*?- .*?\.ts
Это X
\d{8} \d{4} -.*?- ?(.*)\.ts
Это Y
(.*[^ _\,\.\(\)\[\]\-])[ _\.\(\)\[\]\-]+(19[0-9][0-9]|20[0-9][0-9])([ _\,\.\(\)\[\]\-]|[^0-9]$)?
Я проверил регулярные выражения A, X и Y, и они работают индивидуально, но не когда я соединяю их. Может ли кто-нибудь помочь собрать их вместе, используя стандарт PCRE?
Cheers,
Flex