用一个例子更好地解释.
这是文字:
<li>hello THE WORDS </li> <li> cruel </li> <li> world THE WORDS </li>
我想找到以< li>开头的字符串并以< / li>结尾并包含单词.我希望只与< li>相匹配你好,他们的话< / li>和< li>世界的话语< / li>.
我尝试了什么:(?s)< li>.*?(THE WORDS).*?< / li>
有了这个,第二场比赛是< li>残忍的< / li> <李>世界的话语< / li>.
我正在使用Sublime Text.
解决方法
编辑:对于新的要求,使用此正则表达式:
(?s)<li>(?:(?!</li>).)*?THE WORDS.*?</li>
说明
>(?s)激活DOTALL模式,允许点跨线匹配
>< li>匹配文字字符
>(?:(?!< / li>).)断言后面的内容不是< / li并匹配一个字符
> *?量词使我们懒洋洋地匹配….
>言语
>
> *?量词使我们懒洋洋地匹配….
> literal< / li>
原始答案(不同要求):
使用这个简单的正则表达式(在Sublime中测试):
x+[^xy]*z[^xy]*y+
请参阅regex demo中的匹配项.
说明
> x匹配一个或多个x字符> [^ xy] *匹配任何既不是x也不是y的字符> z匹配我们想要的z(确保至少有一个)> [^ xy] *匹配任何既不是x也不是y的字符> y匹配一个或多个y字符