正则表达式多行搜索模式

时间:2013-04-09 16:46:44

标签: c++ regex boost

我一直在努力寻找答案。虽然我正在使用C ++ boost正则表达式,但如果我只有一个工作表达式,我可以适应它(虽然我会非常感激地接受一个特定于提升的线索)。

我有以下示例文本:

----
this is a sample line -> various chars
another sample line (again 'might have different chars]
etc., etc.
----
more data
again anything in here.
more lines of text -> etc
etc. etc.
----
maybe only one line

和尾随的“----”是可选的。

我试过了:

^-{4}\s(.*\s)*?(-{4})+

和变化,但我只得到我的组2中的最后一行,而我想要所有的行 跟随第2组中的4' - '字符,除非它是以4' - '字符开头的另一行。

1 个答案:

答案 0 :(得分:0)

量化捕获组仅捕获最后一个实例。使该组不捕获,并将整个量化表达式包装到捕获组中。

^-{4}\s((?:.*\s)*?)(-{4})+
       ^ ^^       ^

另外,我不确定(-{4})+的目的是什么。你的意思可能是:

^-{4}\s((?:.*\s)*?)(?=-{4}|\s*$)
                   ^^^^^^^^^^^^^

(?= ... )是一个先行断言。它声称紧跟当前位置后是-{4}或文本的结尾(在可能的空格之后)。

最后,您可能想要进行一次调整......

^-{4}\s+((?:.*\s+)*?)(?=-{4}|\s*$)
     ^          ^   

...如果您的文字之间有空行。