我正在尝试构建与以下表达式匹配的正则表达式:
<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等其他语言。
答案 0 :(得分:1)
别忘了:
Parsing HTML with regex is a hard job HTML和正则表达式不是好朋友。使用解析器,它更简单,更快并且更易于维护。
但是,如果您真的想要正则表达式,请使用:
<div[^>]*>(?:(?!</div>)[\s\S])*searched string(?:(?!</div)[\s\S])*</div>
截屏: