2012-10-22 44 views
2

\\ b根據我看到的正則表達式的文件是\ B匹配單詞邊界英寸 予準備的字符串 B對正則表達式中

「分貝BD如何」

和正則表達式

\ B(A | B)(C | d)\ b

我想運行正則表達式時,就應該匹配字符串「BD」,但它沒有。

但是,如果正則表達式是

\\ B(A | B)(C | d)\\ b

它匹配。

你能解釋的區別?

+2

您使用的是Objective-C的哪種語言的幾層? – kennytm

+0

這真的取決於上下文。如果你在一個字符串中提供表達式,那麼在大多數編程語言中,'''''也是字符串中的轉義字符,所以你必須轉義''\''爲表達式創建一個反斜槓。否則,取決於語言,表達式最終可能爲'b(a | b)(c | d)b'。 –

+0

@KennyTM:是的,我使用的Objective-C –

回答

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

如果是在C或C++程序,編譯器本身可能會將「\ b」和編譯過程中替代它,所以你需要首先從編譯器逃避它。

所以,如果你有

char *regex = "\\bword"; 
在源文件

,並將它傳遞給正則表達式的功能,它會收到「\ bword」。


編輯

我不知道它是否適用於Objective-C的,我與它沒有任何經驗。

+0

謝謝你,你的答案是正確的。但我選擇Tomalak作更多解釋 –