Соответствие сложному регулярному выражению, содержащему выражение регулярного выражения и не содержащее другой строки - PullRequest
0 голосов
/ 10 марта 2020

Я пытаюсь сопоставить через регулярное выражение строку, которая содержит определенный шаблон регулярного выражения и не содержит подстроку. Однако эта подстрока должна находиться в определенном месте строки, подходящей к остальной части шаблона

Я пытаюсь сделать это регулярное выражение

^(-?NODE1-METHOD1-NODE2-).*(?!NODE3)-METHOD2-+

Где я сопоставлю все строки, содержащие NODE1- METHOD1-NODE2-, за которым следует любой символ, который не будет иметь NODE3 и, наконец, будет иметь METHOD2, за которым следует -

Это регулярное выражение будет соответствовать следующей строке

NODE1-METHOD1-NODE2-METHOD4-NODE5-METHOD5-NODE6-METHOD6-NODE6-METHOD7-NODE7-METHOD2----------------------------

, но не этой

NODE1-METHOD1-NODE2-METHOD4-NODE5-METHOD5-NODE3-METHOD2----------------------------

Прямо сейчас, используя шаблон, который я использую, я не могу сопоставить ни один из случаев. Рад изучить другие способы сделать это. Спасибо

1 Ответ

2 голосов
/ 11 марта 2020

Используя эту часть в вашем паттерне .*(?!NODE3)-METHOD2-+ .* будет сначала совпадать до конца строки, за которым следует (?!NODE3), который будет истинным, так как он является концом строки, и нет NODE3 в право.

Сразу после закрытия первой группы вы можете проверить, что остальная часть строки не содержит NODE3, используя отрицательный прогноз с квантификатором внутри * (?!.*NODE3)

Если это удастся, сопоставляйте любой символ, пока не встретите МЕТОД2, за которым следуют 1 или более дефисов .*METHOD2-+

^(-?NODE1-METHOD1-NODE2-)(?!.*NODE3).*METHOD2-+

Regex demo

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