我想为两种语言声明相同的正则表达式模式。对于 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++ 却尝试并很烂?
附言我记得 PHP 就像 TCL 一样工作。
最佳答案
这就是 C++ 和 PHP 的不同之处;在 PHP 中,反斜杠后面的字符与一小组特殊字符匹配(我相信 "rnvtx"
)。如果匹配失败,它将继续而不改变含义。
但是,C++ 期望字符在那个小集合中(顺便说一句,我认为这个集合更大)但是如果匹配失败,您将看到一个错误。
关于php - 为什么必须在 C++ 中转义字符串文字中的反斜杠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13986708/