这是我的代码:
#include <iostream>
#include <string.h>
#include <regex>
using namespace std;
int main () {
string test = "COPY" ;
regex r1 = regex ("(COPY\b)(.*)") ;
if (regex_match (test,r1) ) {
cout << "match !!" ;
} else {
cout << "not match !!";
}
好的,我以为这段代码打印我“匹配!!” ,这就是我想要的。
但是,它给了我一个“不匹配!!”
我该怎么办?
通知:
我希望“COPY”匹配,但不要“COPYs”或“COPYYY”,因为我在代码中使用了“\ b”。
答案 0 :(得分:2)
你需要双重转义你的\b
,因为\
字符是C / C ++中的“转义”序列,就像放一个换行符一样,你使用\n
即使这是"(COPY\b)(.*)"
一个字,而不是两个。所以你的表达式是这样的:"(COPY\\b)(.*)"
到:\
。
对于极端情况,如果要匹配正则表达式中的"\\\\"
字符,则需要:\
,因为{{1}}字符也是转义字符,因此您'逃避逃跑。
仅供参考,这就是为什么在.NET中他们经常使用原始字符串语法进行正则表达式,然后你不需要转义它。其他一些语言没有这个作为转义字符,因此正则表达式更容易。
答案 1 :(得分:1)
首先,修复括号(使用if
语句)。
其次尝试:
regex r1 = regex ("(COPY)(\\b|$)") ;
这将查找“ COPY ”,后跟字干或字符串的结尾。
意味着您的代码应如下所示:
#include <iostream>
#include <string.h>
#include <regex>
using namespace std ;
int main () {
string test = "COPY" ;
regex r1 = regex ("(COPY)(\\b|$)") ;
if (regex_match (test,r1) ) {
cout << "match !!" ;
} else {
cout << "not match !!";
}
}