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

Я пытаюсь построить регулярное выражение, соответствующее выражению, которое:

  • начинается со строки (в моем примере: <div)
  • заканчивается другой строкой ( в моем примере: </div>)
  • содержит искомую строку (в моем примере: searched string).

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

Синтаксический анализ: <div class="testclass">random example text</div> <div id="testid">foo bar foo searched string foo bar</div>

Должно совпадать: <div id="testid">foo bar foo searched string foo bar</div>

Первый <div> не должен совпадать, поскольку он не содержит searched string

Я пробовал что-то вроде: ^(<div)(.|\s)*?(searched string)(.|\s)*?(</div>)$

Но, очевидно, он возвращает все проверенное выражение, поскольку часть (.|\s)*? соответствует всему, пока не найдет искомую строку.

Я хочу, чтобы RegEx отклонил часть <div class="testclass">random example text</div>, поскольку она не содержит searched string

Спасибо за вашу помощь.

РЕДАКТИРОВАТЬ: я использую возвышенное текст 3, чтобы выполнить этот поиск, и, насколько я понимаю, он использует собственный собственный движок регулярных выражений, но я думаю, что logi c может быть похож на другие языки, такие как php.

1 Ответ

1 голос
/ 01 мая 2020

Не забудьте:

Синтаксический анализ HTML с регулярным выражением - тяжелая работа HTML и регулярное выражение не хорошие друзья. Используйте синтаксический анализатор, он проще, быстрее и гораздо более удобен в обслуживании.


Но, если вам действительно нужно регулярное выражение, используйте:

<div[^>]*>(?:(?!</div>)[\s\S])*searched string(?:(?!</div)[\s\S])*</div>

Демо и объяснение

Снимок экрана:

enter image description here

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