如何正確理解正規表示式中的分隔符 b

2022-08-26 09:33:09 字數 1392 閱讀 3339

前言:好久不見,。

最近在學習研究regex,其中有個特迷惑自己的知識點是分隔符 ( word boundary) [\b] (注:為了方便,後文都以來包含字元,並不是reg規則裡面的 ),後面查詢諮詢了解,明白了,記錄下來,希望幫到恰好迷惑的你。

[\b] 官方解釋是:match a word boundary,匹配乙個單詞邊界,也就是單詞和空格之間的位置,它本身不匹配任何字元。一般它有三種情況,如下:

在乙個 \w 字元之前,eg:  \bend

在乙個 \w 字元之後,eg: end\b

在兩個字元之間 ;

情況1,2都比較容易理解,這裡就略過,主要從第3種情況來講講理解。

最開始從網上看到這樣一句話:「如果需要更精確的說法,[\b] 匹配這樣的位置:它的前乙個字元和後乙個字元不全是(乙個是,乙個不是或不存在) [\w] (匹配字母或數字或下劃線或漢字)」;

那做個試驗:

var reg = /end\band/g;

var string = 'wenkend,end,and,endend';

alert( reg.test(string) ) ;

//false

根據上述理解 [\b] 要求它分隔的是一邊是 [\w] , 一邊是非 [\w]。我最開始理所當然的理解為正規表示式 [ end\band ] 匹配字串 [end,and]  end的右邊是分隔符 [,]  ,符合匹配,and的左邊是分隔符 [,] , 符合匹配。那麼它就應該符合匹配,可是為什麼結果是 false 呢?

後面發現自己大錯特錯。

正確理解如下分三步來理解:

-----------------

/end\band/g, "end,and" (匹配end,true

) | |

-----------------

/end\band/g, "end,and" (匹配end後面是否有分隔符,有[,] - true

) | |

------------------

/end\band/g, "end,and" (now,接下來匹配的是否是字元and,因為 [\b]只是匹配匹配乙個位置,本身並不匹配任何字元,所以

等待匹配的字串應該是 [,and] ,而不是[and],顯而易見,[,and] 並不符合匹配規則 [and] - false)

總結來說就是:[end\band] 或者其他類似這樣的正規表示式是沒有意義的,可以說永遠也不會存在的。

如果 [\b] 在中間,regex表示式寫法必須遵循在 [\b] 的左右兩側乙個是[\w],乙個是非 [\w],例如 [end\,] . 

如有錯誤或疑問或建議,請指正,謝謝~

正規表示式 符號的正確理解方式

這個符號在正規表示式的中的應用相信是所有程式設計師都掌握的,因為它是正規表示式中最基礎最常用的知識點。它在正規表示式中表示兩種不同的意義 1 表示匹配一段文字開頭的位置,注意,匹配的是乙個位置,而不是具體的某個字元,匹配位置 在正規表示式中有很重要的意義。這個正規表示式就是用來匹配以小寫的 a 開頭...

以逗號分隔的正規表示式 再見,正規表示式

寫過正規表示式的人都知道,正規表示式入門不難,寫起來也容易。但是正規表示式幾乎沒有可讀性可言,維護起來,真的會讓人抓狂,別以為這段正則是你寫的就可以駕馭它,過個乙個月你可能就不認識它了。完全可以說,天下苦正則久矣。今天給你介紹乙個好東西,可以讓你擺脫正則的噩夢,那就是 python 中乙個非常冷門的...

正規表示式理解

正規表示式問題 string regex 1 d 2 0 4 d 25 0 5 1 9 d 1 9 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 1 d 2 0 4 d 25 0 5 1 9 d d 幫我把這一段解釋下,怎麼看都看不懂 驗...