如何使用正则表达式匹配startlabel与空行或endlabel之间的内容?
<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>)
答案 0 :(得分:4)
您应该使用.*
.*?
匹配尽可能少的匹配。使用(?s)(<START>.*?)(?:(?:\r*\n){2}|<STOP>)
:
(?:\r*\n){2}
离开小组你指定的结束条件。
<STOP>
一个空行。Button
结束标签。答案 1 :(得分:3)
您可以像这样设计模式(使用修饰符m):
<START>[^\n<]*(?:(?:<(?!STOP>)|\n(?!$))[^\n<]*)*(?:<STOP>|\n$|\z)
我们的想法是将所有非<
或换行符与[^\n<]*
匹配。当达到<
或换行符时,否定前瞻会检查它们是否后跟"STOP>"
或行尾。如果否定前瞻成功,则[^\n<]*
(此时非捕获组中)到达下一个<
或换行符。重复该组,直到<STOP>
,两个换行符,即字符串的结尾。
答案 2 :(得分:-1)
使用此模式(?<=<START>).+\n.+