正如我在正则表达式文档中看到的那样 \b 匹配单词边界。准备带子
“db bd 如何”
和正则表达式
\b(a|b)(c|d)\b
我认为在运行正则表达式时,它应该匹配字符串中的“bd”,但事实并非如此。
但如果正则表达式是
\\b(a|b)(c|d)\\b
它匹配。
你能解释一下区别吗?
正如我在正则表达式文档中看到的那样 \b 匹配单词边界。准备带子
“db bd 如何”
和正则表达式
\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";
在您的源文件中,并将其传递给正则表达式函数,它将收到'\ bword'。
编辑
我不知道它是否适用于 Objective-C,我没有使用它的经验。