0

这是我的代码:

#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”。

4

2 回答 2

2

您需要对您的字符进行双重转义\b,因为该\字符是 C/C++ 中的“转义”序列,就像在放置换行符时一样,\n即使这是一个字符,而不是两个字符,您也可以使用。所以你的表达从 this:"(COPY\b)(.*)"到 this: "(COPY\\b)(.*)"

对于极端情况,如果要匹配\正则表达式中的字符,则需要这样做:"\\\\"因为该\字符也是转义字符,因此您正在转义转义。

仅供参考,这就是为什么在 .NET 中他们经常将其原始字符串语法用于正则表达式,然后您不需要转义它。其他一些语言没有这个作为转义字符,所以正则表达式更容易。

于 2013-02-02T14:58:00.853 回答
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 !!";
    }
}
于 2013-02-02T14:51:08.730 回答