我想为两种语言声明相同的正则表达式模式。对于TCL,我这样做
set pattern "\d\s\S"
但对于C ++,我必须以相同的模式执行此操作
boost::regex pattern("\\d\\s\\S");
否则C ++编译器会告诉我们以下内容:
warning C4129: 'd' : unrecognized character escape sequence
那么为什么TCL不试图找到\ d \ s \ S转义符号而只是忽略\
- s但是C ++尝试并糟透了?
P.S。我记得PHP就像TCL一样。
答案 0 :(得分:4)
这就是C ++和PHP的不同之处;在PHP中,反斜杠后面的字符与一小组特殊字符匹配(我相信"rnvtx"
)。如果匹配失败,它将继续而不改变其含义。
然而,C ++期望该字符在那个小集合中(我认为该集合是更大的btw)但是如果匹配失败,你将看到错误。
答案 1 :(得分:1)
C ++具有Character Escape Sequences的概念。转义序列采用\c
形式('c'是一个字符),用于定义字符串文字中的某些特殊字符,因此,反斜杠本身也必须进行转义以表示特殊字符没有暗示。