2017-06-04 60 views
3

這是示例文本:爲什麼這個字邊界的正則表達式不匹配

第1項:1.一種操作的方法。

這符合1.

\b1\. 

但這比賽1.

\b1\.\b 

我需要有一個精確匹配1.我測試它here

+0

爲什麼你需要'\ b'並不是很清楚 - 只需'1 \ .'就可以返回所需的完全匹配。 – Filburt

+0

我不想匹配'1.2'' –

+1

'.'和'[]'(句號後的空格)之間的邊界不是一個單詞邊界,所以您指定的正則表達式行爲正確。 – silkfire

回答

1

.不是一個單詞字符。 \b正在檢查邊界,即字和字符之間的界限不被認爲是字的一部分。因此,您不能指望.位於「單詞」1.之內,因爲這兩個字符不構成單詞。


Quick reference document描述\b爲:

匹配必須在\ W(字母數字)和\ W(非數字字母)之間的邊界上發生。

而且\w被描述爲:

匹配所有文字字符。

如果檢查Word character是什麼,你會發現它包含的Unicode類的L1 [字母,小寫]; Lu [Letter,Uppercase]; Lt [Letter,Titlecase]; Lo [Letter,Other]; Lm [Letter,Modifier]; Mn [Mark,Nonspacing]; Nd [Number,Decimal Digit] and Pc [標點,連接器]

.有Unicode類寶[標點符號,其他]它不在上面列出。

因此,如果您希望\b匹配1.中的單詞邊界,它正好在1.之間。這回答你的問題爲什麼

注:。NET正則表達式應該優先在專用於他們的測試站點上測試,例如Regex Storm。如果你使用PCRE正則表達式來測試你的正則表達式(就像你在鏈接的網站上一樣),你可以從.NET獲得不同的結果。

相關問題