代码之家  ›  专栏  ›  技术社区  ›  Youssef

帮助C++Booo::正则表达式

  •  2
  • Youssef  · 技术社区  · 15 年前

    我试图用Boo::ReXEX在C++中获得字符串中的所有单词。

    这是我的意见:

    “你好,网络-bla bla hohoho”

    使用此代码:

          regex rgx("[a-z]+",boost::regex::perl|boost::regex::icase);
    
          regex_search(input, result, rgx);
    
           for(unsigned int j=0; j<result.size(); ++j)
           {
             cout << result[j] << endl;
           }
    

    我只听到第一个词“你好”。 我的代码怎么了?result.size()返回1。

    谢谢您。

    6 回复  |  直到 11 年前
        1
  •  5
  •   Éric Malenfant    15 年前

    regex_搜索只找到第一个匹配项。要遍历所有匹配项,请使用regex_迭代器

        2
  •  1
  •   sra Jon    13 年前

    尝试 rgx("(?:(\\w+)\\W+)+"); 作为您的正则表达式。 ( ?: 将启动通过匹配完成的非标记组 )+ 它将与字符串中的单词匹配1次或更多次 (\\w+) 将匹配alpha、数字和下划线1次或更多次作为标记组,即返回给您的典型类似单词的字符[i] \\W+ 将匹配一个或多个连续的非字字符,即空格、、-等。

        3
  •  0
  •   Skilldrick    15 年前

    您只搜索字母字符,而不是空格、管道或连字符。 regex_search() 可能只是返回第一场比赛。

        4
  •  0
  •   Marcelo Cantos    15 年前

    也许你可以尝试使用 repeated captures 使用以下regex "(?:([a-z]+)\\b\\s*)+" .

        5
  •  0
  •   Tomalak    15 年前

    要匹配单词,请尝试此regex:

    regex rgx("\\<[a-z]+\\>",boost::regex::perl|boost::regex::icase);
    

    据文件记载, \< 表示单词的开头和 \> 表示boost regex匹配的Perl变体中的单词结尾。

    恐怕还有人要解释如何迭代匹配。Boost文档让我的大脑受伤。

        6
  •  0
  •   Alan Moore Chris Ballance    11 年前

    你需要捕捉 [a-z]+ (或其他一些正则表达式,用于匹配“单词”),由空格或字符串边界绑定。你可以尝试这样的方法:

    ^(\s*.+\s*)+$
    

    无论如何,这不是一个boost::regex问题,只是一个regex问题。使用Perl或bash shell(或任何数量的Web工具)来计算regex,然后在代码中使用。