0

我一直在努力寻找这个问题的答案。虽然我使用的是 C++ boost 正则表达式,但如果我只有一个工作表达式,我可以调整它(尽管我会很感激地接受一个特定于 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“-”字符开头的另一行。

4

1 回答 1

0

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

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

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

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

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

最后,你可能想做一个调整......

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

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

于 2013-04-09T17:03:12.863 回答