Отрицательный взгляд в однострочное регулярное выражение - PullRequest
1 голос
/ 23 марта 2020

У меня есть следующая тестовая строка:

/// <exception cref="x"><paramref name="a"/> is null.</exception>
/// <exception cref="y"><paramref name="b"/> is null. -or-
/// </exception>dfjhhdfhdfkjhdkjdfhkdfjhdf -or-

Это строка из трех строк. Поэтому я создал регулярное выражение с флагом Singleline, чтобы захватывать новые строки с точкой. Мое регулярное выражение:

(<exception.+?>)(?<a>.+?)(?!<\/exception>)-or-

С этим регулярным выражением я ожидаю совпадения только со второй строкой. Но то, что я получаю (визуализируется с помощью regex101.com ):

enter image description here

Первые две строки совпадают, а вторая группа включает </exception> хотя я указал отрицательный прогноз (?!<\/exception>).

Почему это произошло? Как мне сопоставить вторую строку, полагаясь на наличие -or-?

1 Ответ

1 голос
/ 23 марта 2020

Это может быть излишним, но вы можете использовать закаленную точку, чтобы соответствовать -or-, не пропуская закрывающий тег:

<exception[^>]*>((?!</exception>).)*-or-

Демо

Этот шаблон регулярных выражений говорит:

<exception[^>]*>      match an opening <exception> tag
((?!</exception>).)*  then match any content WITHOUT passing a closing </exception> tag
-or-                  match -or-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...