2009年1月15日

java.util.regex正規式的應用:Pattern和Matcher


 
Regular Expression,中文稱:正規式、正規表示式、正則表示式,
在字串的比對上是無比強大的工具,
在java 1.4之後Regular Expression正式被java所支援,
若你使用Eclipse來開發Java,下面這兩個套件可在 Eclipse中幫助你測試你的Regular Expression。
  1. Eclipse 好用套件:Regular Expression Tester
  2. Eclipse 的 plugin,http://myregexp.com/eclipsePlugin.html
而若你需要的是線上的測試工具,可以參考:

一般我們常用的字串操作有很多
譬如說檢查字串中是否包含某個字串
這點可以利用contains來達到
也可以利用Regular Expression來比對

除此之外Regular Expression也可以達到更多判別
例如說字串是不是由什麼特定字串開始或結束
而更強大的功能在於能將符合需求的字串濾出
只要掃過一次就能得到所有符合的項目真的非常方便

如果想得到更詳細的介紹請看 Regular Expression 簡介
語法的介紹則可參考 Java Regular Expression的學習筆記 [精華]

以下的程式簡單地示範了幾個常用的method:
  1. package demo.regex;
  2. import java.util.regex.Matcher;
  3. import java.util.regex.Pattern;
  4. public class Regex {
  5. public static void main(String[] args) {
  6. // 測試 testString 中是否包含了 aa
  7. String testString = "ABCaaabcaac";
  8. System.out.println("String.contains():\t"+testString.contains("aa"));
  9. // 和上面目的相同,但運用了 regular expression
  10. // 而這其實是利用了 Pattern 的靜態方法matches()
  11. System.out.println("String.matches():\t"+testString.matches(".*aa.*"));
  12. System.out.println("Pattern.matches():\t"+Pattern.matches(".*aa.*",testString));
  13. System.out.println();
  14. // 如果要用相同的 regular expression 測試很多資料
  15. // 可以使用Pattern的靜態方法compile()來編譯
  16. // 之後就可以重覆使用這個pattern的matcher()方法來進行字串比對
  17. String testString2 = "aababcAc";
  18. Pattern pattern = Pattern.compile(".*aa.*");
  19. Matcher matcher = pattern.matcher(testString);
  20. System.out.println("matcher.matches():\t"+matcher.matches());
  21. matcher = pattern.matcher(testString2);
  22. System.out.println("matcher.matches():\t"+matcher.matches());
  23. System.out.println();
  24. // 另外Matcher中還有很多方法可以使用
  25. // 除了用 matcher.matches()可以比對字串是不是符合regular expression
  26. // 也可以利用 matcher.lookingAt()比對字串是不是某個regular expression開頭
  27. pattern = Pattern.compile("aa");
  28. matcher = pattern.matcher(testString);
  29. System.out.println("matcher.matches():\t"+matcher.lookingAt());
  30. matcher = pattern.matcher(testString2);
  31. System.out.println("matcher.matches():\t"+matcher.lookingAt());
  32. System.out.println();
  33. // 想取出字串中符合的區段則可以運用 matcher
  34. // 例如想從下面四個號碼找出手機的格式
  35. // 就可以用 matcher.find()及matcher.group()來取出符合的項目
  36. String testString3 = "0911-111111, 02-22222222, 0922-222222, 03-33333333";
  37. pattern = Pattern.compile("\\d{4}-\\d{6}");
  38. matcher = pattern.matcher(testString3);
  39. while (matcher.find()) {
  40. System.out.println("matcher.group():\t"+matcher.group());
  41. }
  42. }
  43. }
而輸出的結果如下:
String.contains(): true
String.matches(): true
Pattern.matches(): true

matcher.matches(): true
matcher.matches(): true

matcher.matches(): false
matcher.matches(): true

matcher.group(): 0911-111111
matcher.group(): 0922-222222

關鍵字:Regular Expression, Pattern, Matcher, 正規式, 正規表示式, 正則表示式
參考資料:
  1. JAVA API:java.util.regex
  2. Java Gossip: Pattern、Matcher
  3. Regular Expression 簡介
  4. Java Regular Expression的學習筆記 [精華]
  5. Eclipse 好用套件:Regular Expression Tester
  6. Online Regular Expression Tester:線上正規式測試驗證工具網站


更多精選推薦文章

0 意見 :