Regex 在VC中使用正则表达式++

Regex 在VC中使用正则表达式++,regex,visual-c++,Regex,Visual C++,我在mu项目中找到了电子邮件ID,我正在使用一些正则表达式对输入进行预处理 RegExpPhone6.RegComp("[\[\{\(][ -]?[s][h][i][f][t][ -]?[+-][2][ -]?[\]\}\)]"); 在这里,当我编译的时候,我得到了一个警告消息,比如 Warning 39 warning C4129: ')' : unrecognized character escape sequence 我如何解决这个问题? 为什么会发生这种情况,它会影响到哪里?

我在mu项目中找到了电子邮件ID,我正在使用一些正则表达式对输入进行预处理

RegExpPhone6.RegComp("[\[\{\(][ -]?[s][h][i][f][t][ -]?[+-][2][ -]?[\]\}\)]");  
在这里,当我编译的时候,我得到了一个警告消息,比如

Warning 39  warning C4129: ')' : unrecognized character escape sequence 
我如何解决这个问题? 为什么会发生这种情况,它会影响到哪里?
请帮助我…

您确定字符串中没有使用双引号吗

使用二进制搜索解决此问题。去掉一半的字符,看看它是否编译。 如果它确实编译,则对另一半进行重复。然后重复使用非编译字符串的一半,直到找到导致问题的字符。然后用反斜杠将其转义

例如,如果要在字符串中使用双引号,则必须编写以下内容:

"My name is \"Pat\""

您确定字符串中没有使用双引号吗

使用二进制搜索解决此问题。去掉一半的字符,看看它是否编译。 如果它确实编译,则对另一半进行重复。然后重复使用非编译字符串的一半,直到找到导致问题的字符。然后用反斜杠将其转义

例如,如果要在字符串中使用双引号,则必须编写以下内容:

"My name is \"Pat\""

我不确定您使用的是哪种正则表达式引擎,但根据错误

是不被认可的逃避,所以它似乎在抱怨你的所作所为

大多数情况下,{}in[]不需要逃逸,只要[{}]就可以了

而[s][h][i][f][t]与shift相同

所以,它将是这样的

RegExpPhone6.RegComp("[\[{(][ -]?shift[ -]?[+-][2][ -]?[\]})]");    


如果仍然不起作用,请尝试将\改为\\,有时需要避开反斜杠。

我不确定您使用的是哪种正则表达式引擎,但根据错误

是不被认可的逃避,所以它似乎在抱怨你的所作所为

大多数情况下,{}in[]不需要逃逸,只要[{}]就可以了

而[s][h][i][f][t]与shift相同

所以,它将是这样的

RegExpPhone6.RegComp("[\[{(][ -]?shift[ -]?[+-][2][ -]?[\]})]");    


如果仍然不起作用,请尝试将\改为\\,有时需要转义反斜杠。

您的字符类中已转义了需要转义且不应转义的字符,尤其是,[]和{}

就你而言

RegExpPhone6.RegComp("[{([][ -]?shift[ -]?[+-][2][ -]?[]})]");
应该做得很好

请注意,character类中字符的顺序对该操作很重要

[[{}]将匹配所有大括号/括号/方括号。但如果是空字符类,可能会让人感到不舒服,因此在这种情况下,避开括号可能是一个更好的主意:

RegExpPhone6.RegComp("[{(\[][ -]?shift[ -]?[+-][2][ -]?[\]})]");

另请参阅关于这可能是一个问题的原因和位置。

您在角色类中转义了需要转义且不应该转义的字符,尤其是[]和{}

就你而言

RegExpPhone6.RegComp("[{([][ -]?shift[ -]?[+-][2][ -]?[]})]");
应该做得很好

请注意,character类中字符的顺序对该操作很重要

[[{}]将匹配所有大括号/括号/方括号。但如果是空字符类,可能会让人感到不舒服,因此在这种情况下,避开括号可能是一个更好的主意:

RegExpPhone6.RegComp("[{(\[][ -]?shift[ -]?[+-][2][ -]?[\]})]");

参见为什么和在哪里可能出现问题。

< P> C++编译器将字符串中的某些转义序列转换为备用值。其中最著名的可能是\n,它被转换为换行符。在这种情况下,编译器会抱怨,因为\不是标准的转义序列集之一,可以在其他地方找到转义序列的列表。由于您希望正则表达式本身包含反斜杠,因此可能需要使用\,这是转换为单个\的转义序列。大概是这样的:

RegExpPhone6.RegComp("[\\[\\{\\(][ -]?[s][h][i][f][t][ -]?[+-][2][ -]?[\\]\\}\\)]");

C++编译器将字符串字符串中的某些转义序列转换为备用值。其中最著名的可能是\n,它被转换为换行符。在这种情况下,编译器会抱怨,因为\不是标准的转义序列集之一,可以在其他地方找到转义序列的列表。由于您希望正则表达式本身包含反斜杠,因此可能需要使用\,这是转换为单个\的转义序列。大概是这样的:

RegExpPhone6.RegComp("[\\[\\{\\(][ -]?[s][h][i][f][t][ -]?[+-][2][ -]?[\\]\\}\\)]");