正则表达式中的\ b和\\ b

时间:2012-10-22 10:15:24

标签: objective-c regex word-boundary

正如我在正则表达式文档中看到的那样\ b匹配单词边界。 我准备了一个字符串

  

“db bd how to”

和正则表达式

  

\ B(A | B)(C | d)\ B'/ P>

我认为在运行正则表达式时,它应匹配字符串中的“bd”,但它不匹配。

但如果正则表达式是

  

\\ B(A | B)(C | d)\\ B'/ P>

匹配。

你能解释一下这个区别吗?

2 个答案:

答案 0 :(得分:3)

这里有几层逃脱

regex -----------------> | regex literal -> | string literal
-------------------------+------------------+---------------
word boundary            | \b               | \\b
alternation ("a" or "b") | (a|b)            | (a|b)
alternation ("c" or "d") | (c|d)            | (c|d)
word boundary            | \b               | \\b

答案 1 :(得分:1)

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

所以,如果你有

char *regex = "\\bword";

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


修改

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