Регулярное выражение для соответствия всем вхождениям между комментариями и только внутри тега (html) - PullRequest
0 голосов
/ 16 июня 2020

Regex (preg_match_all()) должно соответствовать всем вхождениям Lorem внутри <p></p> тегов, расположенных между <!--COMMENT_begin--> <!--COMMENT_end--> комментариями.

/<!--COMMENT_begin-->.*?(<p>.*?\bLorem\b.*?<\/p>).*?<!--COMMENT_end-->/sig

Но это регулярное выражение соответствует только первому вхождению в следующей разметке.

<!--COMMENT_begin-->
<p>Lorem</p>
<p>Lorem <span>Lorem</span></p>
<div>Lorem</div>
<p>Ipsum</p>
<p>Lorem</p>
<!--COMMENT_end-->

1 Ответ

1 голос
/ 17 июня 2020

Используйте

(?si)(?:\G(?!\A)|(?:\G(?!\A)|<!--COMMENT_begin-->)(?:(?!<!--COMMENT_(?:begin|end)-->).)*?<p>)(?:(?!<\/?p>).)*?\K\bLorem\b

См. proof

Он будет соответствовать всем Lorem внутри p тегов, которые расположены между <!--COMMENT_begin--> и <!--COMMENT_end--> в режиме без учета регистра.

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