Java 與 Regular Expression 陳鍾誠 2006 年於金門
正規表示式 Regular Expression 說明 用來進行字串比對的一種語言 理論 能力與 Finite State Automata 相同 用途 抽取電話號碼、網址、email 等訊息
範例 : 整數 語法: [0-9]+ 簡化語法: \d+ 比對範例 372 成功 Abc 失敗
範例 :實數 語法: [0-9]+\.?[0-9]* 簡化語法: \d+\.?\d 比對範例 1.234 成功 1.a 失敗
範例 :英文詞彙 語法: [a-zA-Z]+ 簡化語法: \p{Alpha}+ 比對範例 hello 成功 h2o 失敗
範例 :電話 語法: 簡化語法: 比對範例 [0-9](2,4)-[0-9](5,9) \d(2,3)-\d(5,9) 082-313530 成功 002367-1234 失敗
範例 : email 語法: 簡化語法: 比對範例 [a-zA-Z0-9]+@[a-zA-Z0-9\.]+ \w+@[\w\.]+ ccc@kmit.edu.tw 成功 ccc#kmit.edu.tw 失敗
範例 : URL 語法: 簡化語法: 比對範例 http://[a-zA-Z0-9\./]+ http://[\w\./]+ http://ccc.kmit.edu.tw/index.htm 成功 ftp://ccc.kmit.edu.tw/ 失敗
範例 : 地址 語法: 簡化語法: 比對範例 .(2,2)縣.(10,20)[路街巷].[0-9零一-九](1,3)號 .(2,2)[縣市].(10,20)[路街巷].[\d零一-九](1,3)號 比對範例 金門縣金寧鄉大學路一號 成功 金寧鄉大學路一號 失敗
Java 的 Regular Expression 語法 請參考 Pattern 物件的說明 http://java.sun.com/j2se/1.5.0/docs/api/java/util/regex/Pattern.html
Java 的 regex 函式庫 java.util.regex 物件 Pattern : 比對樣式 Matcher : 比較器
Java 的 regex 程式範例 參考 Regex1.java 與 REGEX.java // Match URL String pattern = "http://[\\w/\\.]{5,100}"; String text = "URL of KMIT is http://www.kmit.edu.tw/\n”+ "URL of ccc is http://ccc.kmit.edu.tw/"; Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(text); while (m.find()) { System.out.println("token="+text.substring(m.start(), m.end())); } 參考 Regex1.java 與 REGEX.java
隨堂習題1 請撰寫一個程式,可以利用 Regular Expression 將 下列內容中的所有電話號碼抽取出來。 小明家住台北,電話是 02-21263324, 今天他打電話 082-313530 約金門的阿 花,阿花沒空、所以小明就改打 03-22161233 約桃園的阿珠。
隨堂習題2 請撰寫一個程式,可以利用 Regular Expression 將http://tw.yahoo.com/ 首頁中的所有超連結給抽出來。