我在mu项目中找到Email ids,我正在使用一些正则表达式预处理输入。
RegExpPhone6.RegComp("[\[\{\(][ -]?[s][h][i][f][t][ -]?[+-][2][ -]?[\]\}\)]");
在我编译的时候,我正在收到警告信息,如
Warning 39 warning C4129: ')' : unrecognized character escape sequence
我该如何解决这个问题? 为什么会发生这种情况?它会影响到哪里? 请帮助我...
答案 0 :(得分:2)
我不确定您使用的是哪种正则表达式引擎,但根据错误,
)
无法识别转义,所以它似乎抱怨你在做\)
。
大多数情况()
{}
[]
内[(){}]
只需要[s][h][i][f][t]
就可以了。
和shift
与RegExpPhone6.RegComp("[\[{(][ -]?shift[ -]?[+-][2][ -]?[\]})]");
所以,就像这样
\
并且
如果仍然无效,请尝试将\\
更改为{{1}},有时需要转义反斜杠。
答案 1 :(得分:2)
C ++编译器会将字符串文字中的某些转义序列转换为备用值。其中最着名的可能是\ n,它会转换为换行符。在这种情况下,编译器抱怨,因为\)不是标准的转义序列集之一(其中可以找到here的列表)。由于您希望正则表达式本身包含反斜杠,因此您可能希望使用\\,这是转换为单个\的转义序列。像这样:
RegExpPhone6.RegComp("[\\[\\{\\(][ -]?[s][h][i][f][t][ -]?[+-][2][ -]?[\\]\\}\\)]");
答案 2 :(得分:1)
您已在角色类中转义了需要(且不应该)转义的角色,尤其是()
,[]
和{}
。
在你的情况下
RegExpPhone6.RegComp("[{([][ -]?shift[ -]?[+-][2][ -]?[]})]");
应该做得很好。
请注意,字符类中字符的顺序对此起作用很重要。
[][(){}]
将匹配所有大括号/ parens /括号。但它可能会让人们失望(“这是一个空的角色类?”),所以在这种情况下,转移括号可能是一个更好的主意:
RegExpPhone6.RegComp("[{(\[][ -]?shift[ -]?[+-][2][ -]?[\]})]");
另见Jan Goyvaerts' blog关于这可能成为问题的原因和地点。
答案 3 :(得分:0)
你确定你没有在字符串中使用双引号吗?
使用二进制搜索解决问题。摆脱一半的角色,看看它是否编译。 如果它确实编译,则重复另一半。然后重复使用非编译字符串的一半,直到找到导致问题的字符。然后使用反斜杠将其转义。
E.g。如果你想在字符串中使用双引号,你必须写这个:
"My name is \"Pat\""