2014-12-31 156 views
2

現在,我很困惑。 b和>, <在正則表達式中有什麼區別?

我發現這個在正則表達式小抄

\b word boundary 
\< start of word 
\> end of word 

但在 「精通正則表達式」 的書,它告訴我,

\< word boundary 
\> word boundary 

有什麼區別在\b\>之間\< in rege X?

+0

我建議你試一下表達式。你只需要一個文本編輯器,控制檯程序或其中一個免費網站來測試這些。請記住,正則表達式解析因引擎而異,也就是程序。 – Smandoli

+2

什麼語言?編程語言的正則表達式之間可能會有細微的差異 – ryanyuyu

+1

@Smandoli謝謝您的建議,但我的這個問題的目的是在理論上不是一個實用的術語。 – fronthem

回答

3

摘要

\b word boundary 
\< word boundary; specifically, word boundary followed by a word; ie, start of word 
\> word boundary; specifically, word followed by word boundary; ie, end of word 

如果你有一個像「鮑勃」一詞,則\b字邊界模式將返回等同於開始和的結束兩個零長度匹配字。這很有用,因爲可以讓你選擇字符串中的單詞。因此,與\b匹配的字符串「foo bar」在兩個單詞的開始 - 結束 - 開始 - 結尾處有四個空匹配。

在此基礎上,您可以看到\<會給出單詞的開始位置(2個匹配foo的開始和bar的開始)​​以及\>單詞的末尾(兩個匹配爲foo的結尾和酒吧的結束)。

所以,你可以等同\b\<這樣的:

\< 
is equivalent to 
    start-of-word 
is equivalent to 
    word-boundary-followed-by-word 
is equivalent to 
    \b(?=\w) 

我覺得你的「精通正則表達式」本書則是一個有點模糊,並描述\<\>爲字邊界,當它應該更精確地將它們分別區分爲「文字邊界(具體用於詞的開始)」和「文字邊界(具體用於詞的結尾)」。

Python的例子:

>>> re.compile(r'\b').findall('foo bar') 
['', '', '', ''] 
>>> re.compile(r'\b(?=\w)').findall('foo bar') 
['', ''] 

注意,Python不支持\<\>。這是一個爲什麼字邊界有用的例子。我們可以挑出整個單詞的BAR,而不是在foo裏面包含的BAR:

>>> re.compile(r'\bBAR\b').findall('foBARo BAR') 
['BAR'] 
+0

國際海事組織,我猜 '\ b'是一個單詞邊界,它後面跟着一個單詞或跟隨一個單詞; '\ <'是一個單詞邊界,後面跟着一個單詞; '\>'是一個單詞的邊界, – fronthem

+0

是的,就是這樣。 – sifriday

相關問題