根据正则表达式文档,\b匹配单词边界。我准备了一个字符串 "db bd how to" 和正则表达式 \b(a|b)(c|d)\b。我认为运行该正则表达式时应该匹配字符串中的 "bd",但实际上没有匹配到。但是如果将正则表达式写成 \\b(a|b)(c|d)\\b,则可以匹配。请问有何区别?
这里涉及到几个层面的转义
正则表达式 -----------------> | 正则表达式字面量 -> | 字符串字面量 -------------------------+------------------+--------------- 单词边界 | \b | \\b 或运算 ("a" 或 "b") | (a|b) | (a|b) 或运算 ("c" 或 "d") | (c|d) | (c|d) 单词边界 | \b | \\b
如果这是在C或C++程序中,编译器本身可能会在编译期间解释'\b'并进行替换,因此您需要先从编译器中转义它。
所以如果您有
char *regex = "\\bword";
编辑
我不知道它是否适用于Objective-C,我没有相关经验。
\
是字符串中的转义字符,所以你需要用\\
来创建一个字面上的反斜杠来表示该表达式。否则,根据不同的编程语言,该表达式可能会变成b(a|b)(c|d)b
。 - Felix Kling