我在 C++ 11 中写了这行正则表达式:
regex a("(\\w\\d)+(\\W)?(*)(\\W)?(\\w\\d)+");
我想找到像 A * B(A 或 B 可以是数字)这样的短语,空格是可选的
但在这条线上,它抛出了一个豁免!这行代码有什么问题?
转义星号(不确定是否应该用单反斜杠或双反斜杠转义,但如果我错了,请纠正我!):
regex a("(\\w\\d)+(\\W)?(\\*)(\\W)?(\\w\\d)+");
^^
星号是正则表达式中的一个字符,表示一个字符或一组字符出现 0 次或更多次。
单独使用(*)
无效,并导致“异常”:)
尽管如此,为了使它工作,你需要这个正则表达式:
regex a("(\\w)+(\\W)?(\\*)(\\W)?(\\w)+");
这应该与您的字符串匹配A * B
\w
(或\\w
)在你的情况下匹配数字和字母,所以不要担心使用\\d
,因为你写它的方式,它会匹配一个带有数字的字母数字字符(或下划线)。
最后,如果您只想匹配而不是捕获,这应该仍然有效:
regex a("\\w+\\W?\\*\\W?\\w+");
附录:
regex rx{ R"((\w)+\W?(\*)\W?(\w)+)" };
cout << regex_replace("A * B", rx, "($1$2$3)");
*
是正则表达式中的保留字符,将匹配一个字符 0 次或多次。您需要使用转义*
字符\\*
来匹配*
符号
例如
regex a("(\\w\\d)+(\\W)?(\\*)(\\W)?(\\w\\d)+");