正则表达式匹配多行字符串开始与x,以y结尾并包含z而不是中间的x

pre*_*per 4 regex non-greedy sublimetext

用一个例子更好地解释.

这是文字:

<li>hello 
THE WORDS
</li>

<li> cruel </li>

<li> world THE WORDS </li>
Run Code Online (Sandbox Code Playgroud)

我想找到以字符串开头<li>和结尾</li>并包含的字符串THE WORDS.我期待只与<li> hello THE WORDS </li>和匹配<li> world THE WORDS </li>.

我尝试了什么: (?s)<li>.*?(THE WORDS).*?</li>

有了这个,第二场比赛是<li> cruel </li> <li> world THE WORDS </li>.

我正在使用Sublime Text.

zx8*_*x81 5

编辑:对于新的要求,使用此正则表达式:

(?s)<li>(?:(?!</li>).)*?THE WORDS.*?</li>
Run Code Online (Sandbox Code Playgroud)

说明

  • (?s)激活DOTALL模式,允许点跨线匹配
  • <li> 匹配文字字符
  • (?:(?!</li>).)断言后面的内容不是</li并匹配一个字符
  • 该*?量词让我们懒洋洋地匹配到....
  • THE WORDS
    • 该*?量词让我们懒洋洋地匹配到....
  • 文字 </li>

原始答案(不同要求):

使用这个简单的正则表达式(在Sublime中测试):

x+[^xy]*z[^xy]*y+
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示中的匹配项.

说明

  • x+匹配一个或多个x字符
  • [^xy]*匹配任何既不是x也不是a的字符y
  • z匹配z我们想要的(确保至少有一个)
  • [^xy]*匹配任何既不是x也不是a的字符y
  • y+匹配一个或多个y字符