国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

如何使用Java自帶的正則表達式

2019-11-18 14:55:22
字體:
來源:轉載
供稿:網友

  在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("http://(//d{3}//)//s//d{3}-//d{4}");

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



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 体育| 太原市| 绥德县| 夹江县| 黄浦区| 襄汾县| 伊川县| 大同市| 姜堰市| 连山| 临潭县| 五家渠市| 铜川市| 喜德县| 惠州市| 蕲春县| 区。| 保靖县| 汪清县| 罗甸县| 奉新县| 石屏县| 山西省| 文安县| 平乡县| 忻州市| 枣强县| 阿巴嘎旗| 富蕴县| 平乐县| 尼勒克县| 易门县| 扶风县| 兰考县| 天长市| 加查县| 仁寿县| 英山县| 阿城市| 荔波县| 绵阳市|