Именованная группа захвата внутри отрицательного взгляда за регулярное выражение

Я хочу избежать перехвата ввода как:

:):) но хотите поймать sa:) ds или просто хотите исключить из результата, если есть два или более одинаковых тега, которые касаются друг друга.

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

Я пробовал с:(?<!(?P<happy>:\)))(?P=happy)так что, если у меня есть вход как:):) -:) - abc, я хочу, чтобы совпадать только со второй строки ":)"

1 ответ

Если вы собираетесь построить регулярное выражение для.NET, не работайте с другими механизмами RegEx для проверки ваших шаблонов. Тем не менее, вы можете извлечь выгоду из видоискателей переменной длины в.NET, но не в PCRE (движок, с которым вы работаете).

Это будет обходной путь в.NET:

(?<happy>:\))(?<!\k<happy>{2,})(?!\k<happy>)

Это очевидно не работает в regex101.com

Другие вопросы по тегам