當前位置:首頁 » 編程語言 » javaregex

javaregex

發布時間: 2025-01-29 21:54:42

java.util.regex中的pattern 和 matcher的用法

Pattern和Matcher是Java中用於處理正則表達式的類。Pattern代表編譯後的正則表達式模式,而Matcher則用於執行匹配操作。

首先,通過Pattern類的實例化,可以創建一個匹配模式。例如,使用"[a-z]{3}"作為模式,表示匹配三個連續的小寫字母的字元串。然後,通過調用Pattern的靜態方法matches或compile方法,可以得到一個Matcher對象。

String類提供了matches方法,可以用來直接檢查字元串是否完全匹配給定的正則表達式。例如:

String s = "abc";
boolean b = s.matches("[a-z]{3}");
System.out.println(b);

這將返回true,因為"abc"確實匹配三個連續的小寫字母的模式。

另外,通過Pattern類的matches方法也可以實現同樣的功能:

boolean b = Pattern.matches("[a-z]{3}", "abc");
System.out.println(b);

同樣會輸出true。

Matcher類提供了更強大的匹配功能。首先使用compile方法編譯模式:

Pattern p = Pattern.compile("[a-z]{3}");
Matcher m = p.matcher("acc");

然後使用Matcher的matches方法來檢查整個字元串是否匹配:

boolean b = m.matches();
System.out.println(b);

這將返回false,因為"acc"雖然包含三個連續的小寫字母,但並不完全匹配。

需要注意的是,matches方法會檢查整個字元串是否完全匹配,而find方法則用於查找字元串中匹配的部分:

boolean b = m.find();
System.out.println(b);

這將返回true,因為"acc"中包含匹配的部分。

㈡ 如何使用java.util.regex包

在Sun的Java JDK 1.40版本中,Java自帶了支持正則表達式的包,本文就拋磚引玉地介紹了如何使用java.util.regex包。
可粗略估計一下,除了偶爾用Linux的外,其他Linu x用戶都會遇到正則表達式。正則表達式是個極端強大工具,而且在字元串模式-匹配和字元串模式-替換方面富有彈性。在Unix世界裡,正則表達式幾乎沒有什麼限制,可肯定的是,它應用非常之廣泛。

正則表達式的引擎已被許多普通的Unix工具所實現,包括grep,awk,vi和Emacs等。此外,許多使用比較廣泛的腳本語言也支持正則表達式,比如Python,Tcl,JavaScript,以及最著名的Perl。

我很早以前就是個Perl方面的黑客,如果你和我一樣話,你也會非常依賴你手邊的這些強大的text-munging工具。近幾年來,像其他程序開發者一樣,我也越來越關注Java的開發。

Java作為一種開發語言,有許多值得推薦的地方,但是它一直以來沒有自帶對正則表達式的支持。直到最近,藉助於第三方的類庫,Java開始支
持正則表達式,但這些第三方的類庫都不一致、兼容性差,而且維護代碼起來很糟糕。這個缺點,對我選擇Java作為首要的開發工具來說,一直是個巨大的顧慮
之處。

你可以想像,當我知道Sun的Java JDK
1.40版本包含了java.util.regex(一個完全開放、自帶的正則表達式包)時,是多麼的高興!很搞笑的說,我花好些時間去挖掘這個被隱藏起
來的寶石。我非常驚奇的是,Java這樣的一個很大改進(自帶了java.util.regex包)為什麼不多公開一點呢?!

最近,Java雙腳都跳進了正則表達式的世界。java.util.regex包在支持正則表達也有它的過人之處,另外Java也提供詳細的相
關說明文檔。使得朦朦朧朧的regex神秘景象也慢慢被撥開。有一些正則表達式的構成(可能最顯著的是,在於糅合了字元類庫)在Perl都找不到。

在regex包中,包括了兩個類,Pattern(模式類)和Matcher(匹配器類)。Pattern類是用來表達和陳述所要搜索模式的對
象,Matcher類是真正影響搜索的對象。另加一個新的例外類,PatternSyntaxException,當遇到不合法的搜索模式時,會拋出例
外。

即使對正則表達式很熟悉,你會發現,通過java使用正則表達式也相當簡單。要說明的一點是,對那些被Perl的單行匹配所寵壞的Perl狂熱愛好者來說,在使用java的regex包進行替換操作時,會比他們所以前常用的方法費事些。

本文的局限之處,它不是一篇正則表達式用法的完全教程。如果讀者要對正則表達進一步了解的話,推薦閱讀Jeffrey
Frieldl的Mastering Regular
Expressions,該書由O』Reilly出版社出版。我下面就舉一些例子來教讀者如何使用正則表達式,以及如何更簡單地去使用它。

設計一個簡單的表達式來匹配任何電話號碼數字可能是比較復雜的事情,原因在於電話號碼格式有很多種情況。所有必須選擇一個比較有效的模式。比如:(212) 555-1212, 212-555-1212和212 555 1212,某些人會認為它們都是等價的。

首先讓我們構成一個正則表達式。為簡單起見,先構成一個正則表達式來識別下面格式的電話號碼數字:(nnn)nnn-nnnn。

第一步,創建一個pattern對象來匹配上面的子字元串。一旦程序運行後,如果需要的話,可以讓這個對象一般化。匹配上面格式的正則表達可以
這樣構成:(\d{3})\s\d{3}-\d{4},其中\d單字元類型用來匹配從0到9的任何數字,另外{3}重復符號,是個簡便的記號,用來表示有
3個連續的數字位,也等效於(\d\d\d)。\s也另外一個比較有用的單字元類型,用來匹配空格,比如Space鍵,tab鍵和換行符。

是不是很簡單?但是,如果把這個正則表達式的模式用在java程序中,還要做兩件事。對java的解釋器來說,在反斜線字元
(\)前的字元有特殊的含義。在java中,與regex有關的包,並不都能理解和識別反斜線字元(\),盡管可以試試看。但為避免這一點,即為了讓反斜
線字元(\)在模式對象中被完全地傳遞,應該用雙反斜線字元(\)。此外圓括弧在正則表達中兩層含義,如果想讓它解釋為字面上意思(即圓括弧),也需要在
它前面用雙反斜線字元(\\)。也就是像下面的一樣:

\\(\\d{3}\\)\\s\\d{3}-\\d{4}

現在介紹怎樣在java代碼中實現剛才所講的正則表達式。要記住的事,在用正則表達式的包時,在你所定義的類前需要包含該包,也就是這樣的一行:

import java.util.regex.*;

下面的一段代碼實現的功能是,從一個文本文件逐行讀入,並逐行搜索電話號碼數字,一旦找到所匹配的,然後輸出在控制台。

BufferedReader in;

Pattern pattern = Pattern.compile("\\(\\d{3}\\)\\s\\d{3}-\\d{4}");

in = new BufferedReader(new FileReader("phone"));

String s;

while ((s = in.readLine()) != null)

{

Matcher matcher = pattern.matcher(s);

if (matcher.find())

{

System.out.println(matcher.group());

}

}

in.close();

對那些熟悉用Python或Javascript來實現正則表達式的人來說,這段代碼很平常。在Python和Javascript這些語言
中,或者其他的語言,這些正則表達式一旦明確地編譯過後,你想用到哪裡都可以。與Perl的單步匹配相比,看起來多多做了些工作,但這並不很費事。

find()方法,就像你所想像的,用來搜索與正則表達式相匹配的任何目標字元串,group()方法,用來返回包含了所匹配文本的字元串。應
注意的是,上面的代碼,僅用在每行只能含有一個匹配的電話號碼數字字元串時。可以肯定的說,java的正則表達式包能用在一行含有多個匹配目標時的搜索。
本文的原意在於舉一些簡單的例子來激起讀者進一步去學習java自帶的正則表達式包,所以對此就沒有進行深入的探討。

這相當漂亮吧! 但是很遺憾的是,這僅是個電話號碼匹配器。很明顯,還有兩點可以改進。如果在電話號碼的開頭,即區位號和本地號碼之間可能會有空格。我們也可匹配這些情況,則通過在正則表達式中加入\s?來實現,其中?元字元表示在模式可能有0或1個空格符。

第二點是,在本地號碼位的前三位和後四位數字間有可能是空格符,而不是連字型大小,更有勝者,或根本就沒有分隔符,就是7位數字連在一起。對這幾種
情況,我們可以用(-|)?來解決。這個結構的正則表達式就是轉換器,它能匹配上面所說的幾種情況。在()能含有管道符|時,它能匹配是否含有空格符或連
字元,而尾部的?元字元表示是否根本沒有分隔符的情況。

最後,區位號也可能沒有包含在圓括弧內,對此可以簡單地在圓括弧後附上?元字元,但這不是一個很好的解決方法。因為它也包含了不配對的圓括弧,
比如"(555" 或
"555)"。相反,我們可以通過另一種轉換器來強迫讓電話號碼是否帶有有圓括弧:(\(\d{3}\)|\d{3})。如果我們把上面代碼中的正則表達
式用這些改進後的來替換的話,上面的代碼就成了一個非常有用的電話號碼數字匹配器:

Pattern pattern =

Pattern.compile("(\\(\\d{3}\\)|\\d{3})\\s?\\d{3}(-|)?\\d{4}");

可以確定的是,你可以自己試著進一步改進上面的代碼。

現在看看第二個例子,它是從Friedl的中改編過來的。其功能是用來檢查文本文件中是否有重復的單詞,這在印刷排版中會經常遇到,同樣也是個語法檢查器的問題。

匹配單詞,像其他的一樣,也可以通過好幾種的正則表達式來完成。可能最直接的是\b\w+\b,其優點在於只需用少量的regex元字元。其中
\w元字元用來匹配從字母a到u的任何字元。+元字元表示匹配匹配一次或多次字元,\b元字元是用來說明匹配單詞的邊界,它可以是空格或任何一種不同的標
點符號(包括逗號,句號等)。

現在,我們怎樣來檢查一個給定的單詞是否被重復了三次?為完成這個任務,需充分利用正則表達式中的所熟知的向後掃描。如前面提到的,圓括弧在正
則表達式中有幾種不同的用法,一個就是能提供組合類型,組合類型用來保存所匹配的結果或部分匹配的結果(以便後面能用到),即使遇到有相同的模式。在同樣
的正則表達中,可能(也通常期望)不止有一個組合類型。在第n個組合類型中匹配結果可以通過向後掃描來獲取到。向後掃描使得搜索重復的單詞非常簡
單:\b(\w+)\s+\1\b。

圓括弧形成了一個組合類型,在這個正則表示中它是第一組合類型(也是僅有的一個)。向後掃描\1,指的是任何被\w+所匹配的單詞。我們的正則
表達式因此能匹配這樣的單詞,它有一個或多個空格符,後面還跟有一個與此相同的單詞。注意的是,尾部的定位類型(\b)必不可少,它可以防止發生錯誤。如
果我們想匹配"Paris in the the spring",而不是匹配"Java's regex package is the theme
of this article"。根據java現在的格式,則上面的正則表達式就是:Pattern pattern
=Pattern.compile("\\b(\\w+)\\s+\\1\\b");

最後進一步的修改是讓我們的匹配器對大小寫敏感。比如,下面的情況:"The the theme of this article is
the Java's regex
package.",這一點在regex中能非常簡單地實現,即通過使用在Pattern類中預定義的靜態標志CASE_INSENSITIVE :

Pattern pattern =Pattern.compile("\\b(\\w+)\\s+\\1\\b",

Pattern.CASE_INSENSITIVE);

有關正則表達式的話題是非常豐富,而且復雜的,用Java來實現也非常廣泛,則需要對regex包進行的徹底研究,我們在這里所講的只是冰山一
角。即使你對正則表達式比較陌生,使用regex包後會很快發現它強大功能和可伸縮性。如果你是個來自Perl或其他語言王國的老練的正則表達式的黑客,
使用過regex包後,你將會安心地投入到java的世界,而放棄其他的工具,並把java的regex包看成是手邊必備的利器。

㈢ java中怎麼用正則表達式表示數字,包括整數,小數等

java表示整數和小數的正則表達式 ^[+-]?\d+(\.\d+)?$。

㈣ java中怎麼用正則表達式表示數字,包括整數,小數等

在Java編程中,表示整數和小數的正則表達式為:^[+-]?\d+(.\d+)?$。這個表達式能夠匹配整數和小數,包括正數、負數以及帶有小數點的數字。

正則表達式是一種用於匹配字元串中字元組合的模式。在計算機科學領域,正則表達式被廣泛應用於文本檢索與替換等操作。它能夠幫助我們識別、提取或修改符合特定規則的文本內容。

正則表達式的概念最初是由Unix系統中的工具軟體推廣開來的,例如sed和grep。如今,許多編程語言都內置了強大的正則表達式引擎,用於處理字元串相關的操作。在Perl中,正則表達式被內置為一個功能強大的工具,能夠滿足各種復雜的文本處理需求。

正則表達式通常被簡寫為「regex」,其單數形式有regexp、regex,復數形式則有regexps、regexes、regexen。這些術語在不同的編程語言和工具中可能會有所不同。

在Java中,我們可以使用正則表達式來驗證輸入數據是否符合預期格式。例如,當用戶輸入一個數字時,我們可以使用上述的正則表達式來判斷輸入是否為有效的整數或小數。

正則表達式不僅在編程中發揮著重要作用,而且在日常的文本處理工作中也有廣泛應用。通過掌握正則表達式的使用方法,我們可以更加高效地處理復雜的文本數據,提高工作效率。

㈤ java正則中REGEX = "[\u4e00-\u9fa5]+"是什麼意思

「u4e00」和「u9fa5」是unicode編碼,並且正好是中文編碼的開始和結束的兩個值,所以這個正則表達式可以用來判斷字元串中是否包含中文。正則表達式是對字元串操作的一種邏輯公式,就是用事先定義好的一些特定字元、及這些特定字元的組合,組成一個「規則字元串」,這個「規則字元串」用來表達對字元串的一種過濾邏輯。

(5)javaregex擴展閱讀:

正則表達式,又稱規則表達式。(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE),計算機科學的一個概念。正則表達式通常被用來檢索、替換那些符合某個模式(規則)的文本。

熱點內容
qt源碼下載地址 發布:2025-01-30 21:58:47 瀏覽:517
域名解析了不能訪問 發布:2025-01-30 21:29:29 瀏覽:64
車輛頂配配置怎麼選 發布:2025-01-30 21:29:17 瀏覽:161
websocket上傳大文件 發布:2025-01-30 21:26:17 瀏覽:413
無法訪問目標主機linux 發布:2025-01-30 21:25:23 瀏覽:328
存儲介質滿 發布:2025-01-30 21:18:50 瀏覽:885
通過ip直接訪問網站 發布:2025-01-30 21:18:44 瀏覽:350
雙線伺服器的搭建 發布:2025-01-30 21:18:40 瀏覽:381
c語言迭代法求方程根 發布:2025-01-30 21:18:29 瀏覽:812
電腦無法連接錄屏伺服器 發布:2025-01-30 21:15:36 瀏覽:21