正则表达式 - 如何匹配给定单词之间的所有文本

时间:2016-09-23 06:56:56

标签: regex

这是我的文字

FUNCTION 1
    Some text
FUNCTION 2
    Some text
FUNCTION 3
    Some text

我想获得以下匹配

匹配1

FUNCTION 1
    Some text

匹配2

FUNCTION 2
    Some text

匹配3

FUNCTION 3
    Some text

到目前为止我提出的模式是

FUNCTION[\s\S]*FUNCTION

Online demo link

1 个答案:

答案 0 :(得分:1)

您可以使用tempered greedy token正则表达式:

FUNCTION(?:(?!FUNCTION)[\s\S])*

请参阅regex demo

(?:(?!FUNCTION)[\s\S])*是匹配任何未启动[\s\S]字符序列的char(FUNCTION)的标记。基本上,就最终结果而言,它类似于FUNCTION\[\S\s\]*?(?=FUNCTION|$),只是将惰性匹配转换为与下一个序列匹配而不要求它出现在结尾的构造,因此我们可以省略|$替代方案。

如果单词FUNCTION出现在用标签/空格包围的单独行上,您可以将其展开为

^[ \t]*FUNCTION[ \t]*(?:\r?\n(?![ \t]*FUNCTION[ \t]*$).*)*

请参阅this regex demo(请注意此处使用m多线修改器)。