這次帶給大家正則的位置匹配使用詳解,使用正規位置匹配的注意事項有哪些,下面就是實戰案例,一起來看一下。
本文實例講述了正規表示式教程之位置匹配。分享給大家供大家參考,具體如下:
註:在所有例子中正規表示式匹配結果包含在源文本中的【和】之間,有的例子會使用Java來實現,如果是java本身正規表示式的用法,會在對應的地方說明。所有java例子都在JDK1.6.0_13下測試通過。
一、問題引入
如果想匹配一段文字中的某個單字(暫不考慮多行模式,將在後面介紹),我們可能會像下面這樣:
文字: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也配對出來了。要解決這個問題,使用邊界界定符,也就是在正規表示式裡用一些元字元來表示我們想要讓匹配操作在什麼位置(或邊界)發生。
二、單字邊界
一個常用的邊界是由限定符\b指定的單字邊界,\b用來匹配單字的開始和結尾。更確切地說,它是匹配這樣一個位置,這個位置位於一個能夠用來構成單字的字元(字母、數字、下劃線,也就是與\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文檔都以這樣形式開頭:文本:<?xml version="1.0" encoding="UTF-8"?> <project basedir="." default="ear"> </project>
^\s*<\?xml.*?\?>#
结果:
分析:^匹配一个字符串的开头位置,所以^\s*将匹配一个字符串的开头位置和随后的零个或多个空白字符,因为标签前面允许有空格、制表符、换行符等空白字符。
$元字符符的用法除了位置上的差异外,与^用法完全一样。比如,检查一个html页面是否以