正则表达式匹配开始,结尾并包含字符串

时间:2020-05-01 07:16:07

标签: regex

我正在尝试构建与以下表达式匹配的正则表达式:

  • 以字符串开头(在我的示例中为<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

感谢您的帮助。

编辑:我正在使用sublime text 3来执行此搜索,据我了解,它使用了自定义专有的正则表达式引擎,但我想其逻辑可能类似于php等其他语言。

1 个答案:

答案 0 :(得分:1)

别忘了:

Parsing HTML with regex is a hard job HTML和正则表达式不是好朋友。使用解析器,它更简单,更快并且更易于维护。


但是,如果您真的想要正则表达式,请使用:

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

Demo & explanation

截屏:

enter image description here