从开始标签到空行或结束标签的正则表达式匹配

时间:2015-09-21 22:44:49

标签: regex

如何使用正则表达式匹配startlabel与空行或endlabel之间的内容?

例如regex101 link

<START> some text is here. 
more text

unrelated text

<START> even more text. 
text text
<STOP>

它应匹配两场比赛

<START> some text is here. 
more text

<START> even more text. 
text text
<STOP>

到目前为止我出现的正则表达式如下(但是它与整个文本匹配,我假设因为(?s)。* part)。

<START>((?s).*)(\s\s|<STOP>)

3 个答案:

答案 0 :(得分:4)

您应该使用.* .*?匹配尽可能少的匹配。使用(?s)(<START>.*?)(?:(?:\r*\n){2}|<STOP>)

(?:\r*\n){2}

离开小组你指定的结束条件。

  1. <STOP>一个空行。
  2. Button结束标签。
  3. lazy quantifier

答案 1 :(得分:3)

您可以像这样设计模式(使用修饰符m):

<START>[^\n<]*(?:(?:<(?!STOP>)|\n(?!$))[^\n<]*)*(?:<STOP>|\n$|\z)

demo

我们的想法是将所有非<或换行符与[^\n<]*匹配。当达到<或换行符时,否定前瞻会检查它们是否后跟"STOP>"或行尾。如果否定前瞻成功,则[^\n<]*(此时非捕获组中)到达下一个<或换行符。重复该组,直到<STOP>,两个换行符,即字符串的结尾。

答案 2 :(得分:-1)

使用此模式(?<=<START>).+\n.+

在此处查看演示https://regex101.com/r/cU2tX6/2