【问题标题】:Repeating specific regex pattern重复特定的正则表达式模式
【发布时间】:2016-02-26 12:07:39
【问题描述】:

我有一个正则表达式模式:

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

表示模式以@ABC- 开头,后跟一位或多位数字。
我希望这个模式能够匹配这个模式一次或多次,即:

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

【问题讨论】:

  • R"(^(@ABC-\d+)+$)" - 这是你需要的吗?
  • @WiktorStribiżew 嗨,是的,这就是我问这个问题的原因。谢谢它的工作方式。让它成为一个答案,我会接受它。最好的问候

标签: c++ regex boost


【解决方案1】:

使用 grouping construct 并对其应用 quantifier,然后使用 ^$ anchors确保整个字符串与模式匹配:

例子:

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

或者 - 使用non-capturing group,它永远不会在内存缓冲区内创建捕获(这种分组结构旨在仅对子模式进行分组以匹配字符串序列):

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

如果字符串可以为空,请将最后一个+ 替换为*R"(^(@ABC-\d+)*$)"

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

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    相关资源
    最近更新 更多