Формула регулярного выражения не заглядывает внутрь тегов HTML - PullRequest
0 голосов
/ 12 июня 2019

Мой шаблон регулярных выражений работает для всего текста, не содержащегося в тегах HTML:

((?<!-)\btest(?!-)\b)(?=[^<>]*(?:<\w|$))

В следующем примере мне нужно найти оба экземпляра 'test' в этих двух строках:

vdsv ds test dsv sdlvk 
<b>dsjn vkjsd test sv</b>

1 Ответ

1 голос
/ 14 июня 2019

В .NET вы можете использовать бесконечную ширину вида:

\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)

См. Демонстрационный пример .NET

В коде:

var pattern = @"\b(?<!-)test\b(?<!<[^<>]*)(?!-|[^<>]*>)";

информация

  • \b - граница слова
  • (?<!-) - отрицательный взгляд сзади, который не соответствует совпадению, если слева от текущего местоположения есть -
  • test - слово test
  • \b - граница слова
  • (?<!<[^<>]*) - отрицательный вид сзади, который не соответствует совпадению, если есть < и любые 0 или более символов, отличных от < и >, непосредственно слева от текущего местоположения
  • (?!-|[^<>]*>) - отрицательный прогноз, который не дает совпадения, если есть - или любые 0+ символов, отличные от < и >, сопровождаемые > непосредственно справа от текущего местоположения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...