如何编写匹配和不确定数量的组的正则表达式?

时间:2017-07-07 11:14:21

标签: regex

我有一个配置文件,其中规则以

格式定义
RULENAME : STRING > STRING | STRING > STRING | ... (as many STRING > STRING as necessary)

贝娄就是一个例子:

Rule1 : Type1.Output > Type2.Input;

Rule2 : Type1.Output > Type2.Input |
        Type3.Output > Type4.Input;


Rule3 : Type1.Output > Type2.Input |
        Type1.Output > Type2.Input |
        Type1.Output > Type2.Input |
        Type1.Output > Type2.Input;

要清楚,以下任何空格(或空格量)在:,>之间有效。和|。规则以;

结尾

该文件将包含其他信息,但不包含此格式。所以我想编写一个与这些规则相匹配的正则表达式。匹配组应该返回每个规则的规则名称(这些由|分隔),如果可能的话(我不知道它是否是),>每一侧的每个字符串的子组。对于每条规则。

因此,对于Rule2,匹配看起来像这样:

Group 1: Rule2
Group 2.1 Type1.Output 
Group 2.2 Type2.Input
Group 3.1 Type3.Output
Group 3.2 Type4.Input

如果无法使用子组,我可以使用结果.ike

Group 1: Rule2
Group 2: Type1.Output > Type2.Input
Group 3: Type3.Output > Type4.Input

如果重要,我将在Qt / C ++程序的QRegularExpressions中使用它

1 个答案:

答案 0 :(得分:0)

PCRE(以及大多数正则表达式实现')重复捕获组不捕获所有匹配组,只捕获最后一个匹配组。例如:

"abcd" s|(\w)*|\1|

返回

d

a
b
c
d

因此,当您重复捕获组时,不能使用正则表达式匹配返回所有匹配的捕获组。

您可以使用正则表达式作为您的工具之一来使用基于代码的方法,使用正则表达式捕获整个规则,然后在|上拆分该规则字符串并从返回的子字符串中修剪空白。 / p>