繁体   English   中英

C ++ 11中的正则表达式

[英]regular expression in c++ 11

我在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)+");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM