C ++中的正则表达式

时间:2012-07-04 01:31:13

标签: c++ regex boost-regex

现在我有两个正则表达式可以做到这一点:

Regex-1 = "(\\{(\\w+)\\})";
Regex-2 = "(\\{([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\})"; 

我只是希望能够将两个正则表达式合二为一,所以Regex首先搜索的将是匹配。

从概念上讲,我在想regex-1 ||正则表达式-2。这有可能结合起来吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

Regex-1_2 = "(\\{(\\w+)\\})|(\\{([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\})";

编辑:

那么,这样的事情呢?

{(((\w+)|({\w+}))\|?)*}

编辑2:

您的上一条评论有帮助。所以,从头到尾工作。你知道你想匹配一个开放的花括号,所以这部分很简单:

{

现在,在第一个花括号之后,有两个选项。要么会有一个或多个字母数字(或下划线)字符,要么会有三组由管道分隔的零个或多个字符。前两个组必须是非管道字符,而最后一个组必须是非大括号括号字符(因为大括号将关闭表达式)。这可以使用交替构造表达:

{(\w+|[^|]*\|[^|]*\|[^}]*)

最后,表达式以大括号结束:

{(\w+|[^|]*\|[^|]*\|[^}]*)}

这适用于您提供的示例。如果您的规则不同或更具体,您需要这样说。