C ++ regex_match不匹配

时间:2014-04-29 14:48:28

标签: c++ regex

我在XCode上使用C ++。我想使用regex_match匹配非字母字符,但似乎有困难:

#include <iostream>
#include <regex>

using namespace std;

int main(int argc, const char * argv[])
{
    cout << "BY-WORD: " << regex_match("BY-WORD", regex("[^a-zA-Z]")) << endl;
    cout << "BYEWORD: " << regex_match("BYEWORD", regex("[^a-zA-Z]")) << endl;

    return 0;
}

返回:

BY-WORD: 0
BYEWORD: 0

我想要“BY-WORD”匹配(因为连字符),但regex_match为两个测试都返回0。

我说。

2 个答案:

答案 0 :(得分:2)

regex_match尝试将整个输入字符串与您提供的正则表达式进行匹配。由于您的表达式只匹配单个字符,因此它们将始终在这些输入上返回false。

您可能需要regex_search代替。

答案 1 :(得分:2)

regex_match()返回目标序列是否与正则表达式rgx匹配。如果您想搜索目标序列中的非字母字符,则需要regex_search()

#include <regex>
#include <iostream>
int main()
{
    std::regex rx("[^a-zA-Z]");
    std::smatch res;
    std::string str("BY-WORD");
    while (std::regex_search (str,res,rx)) {
        std::cout <<res[0] << std::endl;
        str = res.suffix().str();
    }

}