Java正規表示式詳解

2021-08-22 20:14:45 字數 1637 閱讀 5223

表一顯示了表示匹配次數的符號,這些符號用來確定緊靠該符號左邊的符號出現的次數:

假設我們要在文字檔案中搜尋美國的社會安全號碼。這個號碼的格式是999-99-9999。用來匹配它的正規表示式如圖一所示。在正規表示式中,連字元(「-」)有著特殊的意義,它表示乙個範圍,比如從0到9。因此,匹配社會安全號碼中的連字符號時,它的前面要加上乙個轉義字元「/」。

圖一:匹配所有123-12-1234形式的社會安全號碼

假設進行搜尋的時候,你希望連字符號可以出現,也可以不出現——即,999-99-9999和999999999都屬於正確的格式。這時,你可以在連字符號後面加上「?」數量限定符號,如圖二所示:

圖二:匹配所有123-12-1234和123121234形式的社會安全號碼

下面我們再來看另外乙個例子。美國汽車牌照的一種格式是四個數字加上二個字母。它的正規表示式前面是數字部分「[0-9]」,再加上字母部分「[a-z]」。圖三顯示了完整的正規表示式。

圖三:匹配典型的美國汽車牌照號碼,如8836kv

1.5 「否」符號 「^」符號稱為「否」符號。如果用在方括號內,「^」表示不想要匹配的字元。例如,圖四的正規表示式匹配所有單詞,但以「x」字母開頭的單詞除外。

圖四:匹配所有單詞,但「x」開頭的除外

1.6 圓括號和空白符號 假設要從格式為「june 26, 1951」的生日日期中提取出月份部分,用來匹配該日期的正規表示式可以如圖五所示:

圖五:匹配所有moth dd,yyyy格式的日期

新出現的「/s」符號是空白符號,匹配所有的空白字元,包括tab字元。如果字串正確匹配,接下來如何提取出月份部分呢?只需在月份周圍加上乙個圓括號建立乙個組,然後用oro api(本文後面詳細討論)提取出它的值。修改後的正規表示式如圖六所示:

圖六:匹配所有month dd,yyyy格式的日期,定義月份值為第乙個組

1.7 其它符號

為簡便起見,你可以使用一些為常見正規表示式建立的快捷符號。如表二所示: 表二:常用符號

例如,在前面社會安全號碼的例子中,所有出現「[0-9]」的地方我們都可以使用「/d」。修改後的正規表示式如圖七所示:

圖七:匹配所有123-12-1234格式的社會安全號碼

二、jakarta-oro庫

下面我們來看看jakarta-oro庫的一些應用例項。

3.1 日誌檔案處理

ip位址中的句點字元必須進行轉義處理(前面加上「/」),因為ip位址中的句點具有它本來的含義,而不是採用正規表示式語法中的特殊含義。句點在正規表示式中的特殊含義本文前面已經介紹。 日誌記錄的時間部分由一對方括號包圍。你可以按照如下思路提取出方括號裡面的所有內容:首先搜尋起始方括號字元(「[」),提取出所有不超過結束方括號字元(「]」)的內容,向前尋找直至找到結束方括號字元。圖九顯示了這部分的正規表示式。

圖九:匹配至少乙個字元,直至找到「]」

現在,把上述兩個正規表示式加上分組符號(圓括號)後合併成單個表示式,這樣就可以從日誌記錄提取出ip位址和時間。注意,為了匹配「- -」(但不提取它),正規表示式中間加入了「/s-/s-/s」。完整的正規表示式如圖十所示。

圖十一:匹配font標記的所有屬性

第二個正規表示式如圖十二所示,它把各個屬性分割成名字-值對。

圖十二:匹配單個屬性,並把它分割成名字-值對

Java 正規表示式詳解

1 什麼是正規表示式?正規表示式的定義 這是一種字串的語法規則,是一種可以用於模式匹配和替換的規則,主要用於文字和字串的處理 匹配,查詢,替換,判斷字串 乙個正規表示式是由普通的字元 a z 以及特殊字元 元字元 組成的文字模式,用以描述在查詢文字主體時待匹配的乙個或多個字串。下面我們會介紹一些常用...

Java正規表示式詳解

正規表示式可以說是用來處理字串的一把利器,它是乙個專門匹配n個字串的字串模板,本質是查詢和替換。在例項演示之前先了解一下pattern matcher這兩個工具類.pattern 編譯好的帶匹配的模板 如 pattern.compile a z 取2個小寫字母 matcher 匹配目標字串後產生的結...

Java正規表示式

正規表示式結構簡介 字元 x 字元 x 反斜槓 0n 十進位制數 0 n 7 0nn 十進位制數 0nn 0 n 7 0mnn 十進位制數 0mnn 0 m 3,0 n 7 xhh 十六進製制數 0xhh uhhhh 十六進製制數 0xhhhh t 製表符 u0009 n 換行符 u000a r 回...