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

Regex 如何编写匹配和不确定组数的正则表达式?,regex,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;

我有一个配置文件,其中以以下格式定义了规则

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;
只需澄清,在:,>和|之间的任何空格(或空格量)都是有效的。这条规则以最简单的结尾

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

因此,对于规则2,匹配将如下所示:

Group 1: Rule2
Group 2.1 Type1.Output 
Group 2.2 Type2.Input
Group 3.1 Type3.Output
Group 3.2 Type4.Input
如果子组是不可能的,我可以接受一个结果

Group 1: Rule2
Group 2: Type1.Output > Type2.Input
Group 3: Type3.Output > Type4.Input
如果有关系,我将在Qt/C++程序中的QRegularExpressions中使用此选项

PCRE(以及大多数regex实现)重复捕获组不会捕获所有匹配组,只捕获最后一个匹配组。例如:

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

d
不是

因此,当您重复捕获组时,您不能有一个正则表达式匹配,并且返回所有匹配的捕获组


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

为什么不在
|
字符上拆分该字符串?您的意思是匹配(.*):(.*);然后把绳子分开?我可以,但我觉得只使用正则表达式更好。我还需要确定如何确保这一点。matchets everythingQRegExp regexps不支持
\G
断言,因此您必须使用一个循环来捕获所有匹配项。QRegularExpression,据说扩展后的QRegExp更像“珍珠”,这就是我使用它的原因。使用该断言如何编写正则表达式?到目前为止您尝试了什么?所以,正如你所知,这不是一个请求服务的代码抱歉,关于延迟回复。非常感谢。这正是我所做的:很好,别忘了投票/接受你觉得有用的答案/解决你的问题;D
a
b
c
d