我在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。
我说。
答案 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();
}
}