- Изменить -. В текущих ответах есть несколько полезных идей, но я хочу что-то более полное, что я могу на 100% понять и повторно использовать; почему я поставил щедрость. Кроме того, идеи, которые работают повсюду, лучше для меня, чем не стандартный синтаксис, например \K
Этот вопрос касается того, как я могу сопоставить шаблон, кроме некоторых ситуаций s1 s2 s3. Я даю конкретный пример, чтобы показать свой смысл, но предпочитаю общий ответ, который я могу на 100% понять, поэтому я могу его повторно использовать в других ситуациях.
Пример
Я хочу сопоставить пять цифр с помощью \b\d{5}\b
, но не в трех ситуациях: s1 s2 s3:
s1: Не на строке, заканчивающейся периодом, подобным этому предложению.
s2: Не где-либо внутри parens.
s3: Не внутри блока, который начинается с if(
и заканчивается на //endif
Я знаю, как решить любой из s1 s2 s3 с lookahead и lookbehind, особенно в С# lookbehind или \K
в PHP.
Например
s1 (?m)(?!\d+.*?\.$)\d+
s3 с С# lookbehind (?<!if\(\D*(?=\d+.*?//endif))\b\d+\b
s3 с PHP\K (?:(?:if\(.*?//endif)\D*)*\K\d+
Но смешивание условий вместе заставляет мою голову взорваться. Еще более плохая новость заключается в том, что мне может потребоваться добавить другие условия s4 s5 в другое время.
Хорошая новость: мне все равно, обрабатываю ли я файлы с использованием наиболее распространенных языков, таких как PHP, С#, Python или моя соседняя стиральная машина.:) Я довольно много начинаю на Python и Java, но мне интересно узнать, есть ли у него решение.
Итак, я пришел сюда, чтобы узнать, думает ли кто-нибудь о гибком рецепте.
Подсказки в порядке: вам не нужно указывать полный код.:)
Спасибо.