2016-02-26 50 views
1

我有一个正则表达式模式:重复特定正则表达式模式

boost::regex regex = "@ABC-\\d+" 

这意味着图案开始@ ABC-和接着是一个或多个数字。
我希望这个模式能够匹配这个模式一次或多次,那就是:

boost::regex regex = "@ABC-\\[email protected]\\[email protected]\\[email protected]\\d+etc, etc" 
+3

['R“(^(@ ABC- \ d +)+ $)”'](https://regex101.com/r/qO5oO3/1) - 这就是你需要的吗? –

+0

我正在试图找到一个傻瓜,但无法找到任何好问题。它看起来似乎是一个基本概念:使用分组构造并将量词应用于它。 –

+0

@WiktorStribiżew嗨,是的,这就是为什么我问这个问题。感谢它的工作方式。让它成为答案,我会接受它。最好的祝福 –

回答

1

使用grouping construct和应用quantifier到它,并使用^$anchors

例:

保证整个字符串与模式匹配
R"(^(@ABC-\d+)+$)" 

或 - 与non-capturing group永远不会创建存储缓冲器内的捕获(这个分组构造意在仅组的子模式来匹配串序列):

R"(^(?:@ABC-\d+)+$)" 
    ^^ 

如果字符串可以是空的,用*替换最后的+R"(^(@ABC-\d+)*$)"

请注意,在C++中,当声明正则表达式模式以避免过多反斜杠时,首选原始字符串文字。