2

正如我在正则表达式文档中看到的那样 \b 匹配单词边界。准备带子

“db bd 如何”

和正则表达式

\b(a|b)(c|d)\b

我认为在运行正则表达式时,它应该匹配字符串中的“bd”,但事实并非如此。

但如果正则表达式是

\\b(a|b)(c|d)\\b

它匹配。

你能解释一下区别吗?

4

2 回答 2

4

这里有几层逃逸在起作用

正则表达式 -----------------> | 正则表达式文字 -> | 字符串字面量
----------------------+------------------+------ ----------
词界 | \b | \\b
交替(“a”或“b”)| (a|b) | (a|b)
交替(“c”或“d”)| (c|d) | (c|d)
词界 | \b | \\b
于 2012-10-22T10:22:58.693 回答
1

如果这是在 C 或 C++ 程序中,编译器本身可能会解释 '\b' 并在编译期间替换它,因此您需要先将其从编译器中转义。

所以如果你有

char *regex = "\\bword";

在您的源文件中,并将其传递给正则表达式函数,它将收到'\ bword'。


编辑

我不知道它是否适用于 Objective-C,我没有使用它的经验。

于 2012-10-22T10:16:45.453 回答