4

我想为两种语言声明相同的正则表达式模式。对于 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++ 尝试并很糟糕?

PS PHP 就像我记得的 TCL 一样工作。

4

2 回答 2

4

这就是 C++ 和 PHP 的不同之处;在 PHP 中,反斜杠后面的字符与一小组特殊字符匹配(我相信"rnvtx")。如果匹配失败,它将继续而不改变含义。

但是,C++ 期望字符在那个小集合中(我认为集合更大)但是如果匹配失败,您将看到一个错误。

于 2012-12-21T08:49:17.627 回答
1

C++ 有字符转义序列的概念。采用这种形式的转义序列\c(“c”是一个字符)用于定义字符串文字中的某些特殊字符,因此反斜杠本身也必须转义以表示不隐含特殊字符.

于 2012-12-21T08:45:13.650 回答