c ++中的正则表达式11

Ary*_*yan 0 c++ regex c++11

我在c ++ 11中写了这行前正则表达式:

regex a("(\\w\\d)+(\\W)?(*)(\\W)?(\\w\\d)+");
Run Code Online (Sandbox Code Playgroud)

我想找到像A*B这样的短语(A或B可以是数字),空格是可选的

但在这条线上它会豁免!惠特这行代码有什么不对?

Jer*_*rry 6

逃避星号(不确定是否应该使用单反斜杠或双反斜杠进行转义,但如果我错了,请纠正我!):

regex a("(\\w\\d)+(\\W)?(\\*)(\\W)?(\\w\\d)+");
                         ^^
Run Code Online (Sandbox Code Playgroud)

星号是正则表达式中的一个字符,用于指示字符或字符组的出现次数为0次或更多次.

(*)单独使用无效,并导致"异常":)

尽管如此,为了使它工作,你需要这个正则表达式:

regex a("(\\w)+(\\W)?(\\*)(\\W)?(\\w)+");
Run Code Online (Sandbox Code Playgroud)

这应该匹配您的字符串 A * B

\w(或\\w)在你的情况下匹配数字和字母,所以不要担心使用\\d,因为你写它的方式,它将匹配一个带数字的字母数字字符(或下划线).

最后,如果你只想匹配而不是捕获,这应该仍然有效:

regex a("\\w+\\W?\\*\\W?\\w+");
Run Code Online (Sandbox Code Playgroud)

附录:

regex rx{ R"((\w)+\W?(\*)\W?(\w)+)" };
cout << regex_replace("A * B", rx, "($1$2$3)");
Run Code Online (Sandbox Code Playgroud)