C++ c++;标准正则表达式问号问题
我的性病正则表达式有问题。我不能让问号量词工作。对regex_match的调用将始终返回0 我还尝试了{0,1},它的行为也与我预期的不一样:它的行为类似于+量词 这是我的密码:C++ c++;标准正则表达式问号问题,c++,regex,std,C++,Regex,Std,我的性病正则表达式有问题。我不能让问号量词工作。对regex_match的调用将始终返回0 我还尝试了{0,1},它的行为也与我预期的不一样:它的行为类似于+量词 这是我的密码: #include <iostream> #include <regex> using namespace std; int main(int argc, char **argv){ regex e1("ab?c"); cout << regex_match("ac
#include <iostream>
#include <regex>
using namespace std;
int main(int argc, char **argv){
regex e1("ab?c");
cout << regex_match("ac", e1) << endl; // expected : 1, output 0
cout << regex_match("abc", e1) << endl; // expected : 1, output 0
cout << regex_match("abbc", e1) << endl; // expected : 0, output 0
regex e2("ab{0,1}c");
cout << regex_match("ac", e2) << endl; // expected : 1, output 0
cout << regex_match("abc", e2) << endl; // expected : 1, output 1
cout << regex_match("abbc", e2) << endl; // expected : 0, output 1
return 0;
}
我做错什么了吗?或者为什么它不起作用?
str::regex
在编写本文时,大部分都是而不是在gcc中实现的。见第28节:
正则表达式的POSIX标准定义了两种类型,基本和扩展。这个运算符是一个扩展功能。显然你用
std::regex re2(".*(a|xayy)", std::regex::extended)
获取扩展功能。您的正则表达式代码很好。您正在使用的实现不是。它提供了一个报头,声明了库实现不好的一系列内容。如果一个商业方案真的这样做了,它将受到严厉的批评,这是正确的。你花钱买什么就有什么。据我所知,
std::regex
没有正确/完全实现。(但我不知道这里是这样还是其他情况。)我尝试了20多种变体,包括转义?
、括号、使用*
和{x,y}
都以某种方式失败。我认为
是有缺陷的。是的,我听到过类似的声音,事实上可能就是这样。我已经切换到boost regex(这很有效),但我正在等待更多的答案,这很好。但是我在我的代码中测试了它,但它仍然不起作用(与以前的输出相同),这是一种方法,只是简单的std::regex re2(“*(a | xayy)”)代码>也可以工作。默认的正则表达式语法是ECMAScript,它直接支持?
。
std::regex re2(".*(a|xayy)", std::regex::extended)