2016-04-15 77 views
4

這是關於在問題Check a string to see if all characters are hexadecimal values中給出的答案的問題。.NET正則表達式中的錨點

所提出的正則表達式如下:

\A\b[0-9a-fA-F]+\b\Z 

現在,\A\Z似乎是等效於分別^$\Z的行爲有所不同,因爲匹配後它允許換行符(這可能是也可能不是預期的)。

我不明白的是爲什麼使用\b「匹配字邊界」錨點。不是字符串的開始/結尾總是一個字邊界嗎?

最終,正則表達式可以被重寫爲^[0-9a-fA-F]$具有相同的行爲(忽略尾隨\n問題)。我錯過了什麼嗎?是否使用\b需要一些奇怪的邊緣情況?

測試用例:

123ABC -> true 
123def -> Returns true 
123g -> Returns false 
+0

是的,我想不出任何'\ b'正在完成。 – smead

回答

1

word boundary \b字符串的開始非單詞和單詞字符,而且之間的匹配,如果第一個字符是一個單詞字符,並在結束時,如果最後一個字符是一個字的字符。

因此,\A\b[0-9a-fA-F]+\b\Z等於\A[0-9a-fA-F]+\Z因爲所有字符的字符串必須是用於圖案匹配它字字符([0-9]數字或[a-fA-F]字母)。

在這種情況下將會是一個不同的故事:\A\b[0-9a-fA-F-]+\b\Z只會在開始和結束時匹配包含單詞字符的字符串。

使用\z匹配整個字符串,最後不允許使用\n