我有一个配置文件,其中规则以
格式定义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中使用它
答案 0 :(得分:0)
PCRE(以及大多数正则表达式实现')重复捕获组不捕获所有匹配组,只捕获最后一个匹配组。例如:
"abcd" s|(\w)*|\1|
返回
d
不
a
b
c
d
因此,当您重复捕获组时,不能使用正则表达式匹配和返回所有匹配的捕获组。
您可以使用正则表达式作为您的工具之一来使用基于代码的方法,使用正则表达式捕获整个规则,然后在|
上拆分该规则字符串并从返回的子字符串中修剪空白。 / p>