這篇文章給大家分享的是有關正則表達式之如何實現(xiàn)位置匹配的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比永豐網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式永豐網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋永豐地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。
具體如下:
一、問題引入
如果想匹配一段文本中的某個單詞(暫不考慮多行模式,將在后面介紹),我們可能會像下面這樣:
文本:Yesterday is history, tomorrow is a mystery, but today is a gift.
正則表達式:is
結果:Yesterday 【is】 h【is】tory, tomorrow 【is】 a mystery, but today 【is】 a gift.
分析:本來只是要匹配單詞is,但把其他單詞中包含的is也匹配出來了。要解決這個問題,使用邊界界定符,也就是在正則表達式里用一些元字符來表明我們想讓匹配操作在什么位置(或邊界)發(fā)生。
二、單詞邊界
一種常用的邊界是由限定符\b指定的單詞邊界,\b用來匹配單詞的開始和結尾。更確切地說,它是匹配這樣一個位置,這個位置位于一個能夠用來構成單詞的字符(字母、數(shù)字、下劃線,也就是與\w相匹配的字符)和一個不能用來構成單詞的字符(與\W相匹配的字符)之間。來看前面的例子:
文本:Yesterday is history, tomorrow is a mystery, but today is a gift.
正則表達式:\bis\b
結果:Yesterday 【is】 history, tomorrow 【is】 a mystery, but today 【is】 a gift.
分析:在原始文本中,單詞is的前后都有一個空格,而這與模式\bis\b匹配(空格是用來分隔單詞的字符之一)。而單詞history中也包含了is,因為它的前后分別有一個字符h和t,這兩個字符都不能與\b匹配。
如果不匹配一個單詞邊界,則使用\B。如:
文本:Please enter the nine-digit id as it appears on your color - coded pass-key.
正則表達式:\B-\B
結果:Please enter the 【nine-digit】 id as it appears on your color - coded 【pass-key】.
分析:\B-\B將匹配一個前后都不是單詞邊界的連字符,nine-digit和pass-key中連字符前后都沒有空格,所以能夠匹配,而color - coded中連字符前后都有空格,所以不能匹配。
三、字符串邊界
單詞邊界可以用來進行與單詞有關的位置匹配(單詞開頭、結束、整個單詞等等)。而字符串邊界也有著類似的用途,只不過是用來進行與字符串有關的位置匹配(字符串開頭、結束、整個字符串等等)。用來定義字符串邊界的元字符有兩個:一個是用來定義字符串開頭的^,另一個是用來定義字符串結尾的$。
比如要檢查一個XML文檔的合法性,合法的XML文檔都以這樣形式開頭:
文本:
正則表達式:^\s*<\?xml.*?\?>
結果:
分析:^匹配一個字符串的開頭位置,所以^\s*將匹配一個字符串的開頭位置和隨后的零個或多個空白字符,因為標簽前面允許有空格、制表符、換行符等空白字符。
$元字符符的用法除了位置上的差異外,與^用法完全一樣。比如,檢查一個html頁面是否以