2012-08-08 77 views
109

任何人都可以解釋\ w和\ b正則表達式元字符之間的區別嗎? 這兩個元字符都用於單詞邊界。除此之外,哪一個元字符對多語言內容有效? w和 b正則表達式元字符之間的區別

+11

'\ w'代表一個單詞*字符*,而'\ b'代表單詞字符和非單詞字符之間的單詞邊界。他們不是一回事。 – BoltClock 2012-08-08 22:41:32

回答

196

元字符\b是一個類似插入符號和美元符號的錨。它匹配的位置稱爲「字邊界」。這場比賽是零長度。

有跡象表明,有資格作爲單詞邊界的三個不同位置:

  • 字符串中的第一個字符之前,如果第一個字符是 單詞字符。
  • 在字符串中的最後一個字符後面,如果 最後一個字符是單詞字符。
  • 字符串中的兩個字符之間,其中一個是單詞字符,另一個不是單詞字符。

簡單地說:\b允許您使用的\bword\b形式正則表達式來進行「全字匹配」搜索。A 「單詞字符」是可用於形成單詞的字符。所有不是的字符「單詞字符」都是「非單詞字符」

在所有的口味中,字符[a-zA-Z0-9_]都是單詞字符。這些也與短手角色類\w相匹配。在風味比較中顯示「ascii」的單詞邊界的風味僅將這些識別爲單詞字符。

\w代表「單詞字符」,通常是[A-Za-z0-9_]。注意包含下劃線和數字。

\B\b的否定版本。 \B匹配\b沒有的每個位置。有效地,\B匹配兩個單詞字符之間的任意位置以及兩個非單詞字符之間的任意位置。

\W是​​的縮寫,\w的否定版本。

19

\w匹配單詞字符。 \b是一個匹配位置字符的零寬度匹配,該位置字符在一側具有單詞字符,而另一側則不是單詞字符。 (即沒有字字符的事實例包括空格,開始和結束字符串等)

\w比賽abcdef"abc def"
\b匹配(零-width)a前位置,c後,d之前,和之後在f"abc def"

參見:http://www.regular-expressions.info/reference.html/

+3

更準確地說,它是單詞字符而不是單詞字符之間的邊界,因爲如果該字符位於字符串的開始/結尾,它也匹配單詞字符與字符串的開頭或結尾。 – MRAB 2012-08-08 22:47:42

+0

你說得對,那是更正確的。我會編輯。 – jwismar 2012-08-08 22:49:09

+5

這還不完全正確。 '\ b'是一個零寬度斷言;它不匹配*字符*,它匹配*位置*。 – 2014-09-13 19:33:36

6

@Mahender,你可能是指\W(而不是\w)和\b之間的差異。如果沒有,那麼我會同意上面的@BoltClock和@jwismar。否則繼續閱讀。

\W會匹配任何非單詞字符,因此很容易嘗試使用它來匹配單詞邊界。問題是它不會匹配行的開始或結束。 \b更適合匹配單詞邊界,因爲它也會匹配一條線的開始或結束。粗略地說(更有經驗的用戶可以在這裏糾正我)\b可以被認爲是(\W|^|$)。 [編輯:如@Ωmega下面提及,\b是零長度的匹配,從而(\W|^|$)不是嚴格正確的,但希望有助於解釋DIFF]

快速例如:對於字符串Hello World.+\W將匹配Hello_(與空間)但不匹配World.+\b將匹配HelloWorld

1

\w不是一個字的邊界,它匹配任何字符,包括下劃線:[a-zA-Z0-9_]\b的單詞邊界,即它匹配單詞和非字母數字字符之間的位置:\W或​​。

儘管這些實現可能因語言而異。的位置處

4
\b <= this is a word boundary. 

相配後跟一個字字符,但不冠以一個字字符,或由一個字字符之前而不是之後是文字字符。

\w <= stands for "word character". 

它總是相匹配的ASCII字符[A-ZA-Z0-9 _]

是否有具體的你要匹配什麼?

一些有用的正則表達式網站初學者或只是爲了弄溼你的胃口。

我發現這是一個非常有用的書:

+5

這是一個很好的答案,但記住'\ w'並不總是等同於ASCII字符'[A-Za-z0-9_]' - 它也會匹配字母數字Unicode代碼點,並且可能會如果區域設置適當,則匹配8位ISO-Latin-1字符。 – 2013-12-19 05:14:15

相關問題