網頁

2017/8/17

Regex 點(dot) . 符號

正規表示式中的點.(dot or period)可用來代表任意字元。

下面範例regex="^093."是找出號碼開頭為"093x"的電話


String ph1 = new String("0932299311");
String ph2 = new String("0933884151");
String ph3 = new String("0935007726");
String ph4 = new String("0921000932");
String ph5 = new String("09320077260000");
String ph6 = new String("093Z");

String regex = "^093.";
Pattern p = Pattern.compile(regex);
System.out.println(p.matcher(ph1).find()); // true
System.out.println(p.matcher(ph2).find()); // true
System.out.println(p.matcher(ph3).find()); // true
System.out.println(p.matcher(ph4).find()); // false
System.out.println(p.matcher(ph5).find()); // true
System.out.println(p.matcher(ph6).find()); // true

^符號不是緊接在方括弧[]內,所以意思為從字串的開頭做匹配,因此ph4字串後含有"093"仍不符合條件。

因為沒有做字串長度的判斷,所以ph5和ph6的號碼長度即使不是正常手機號碼的長度(10碼)仍符合條件,結果為true。

因為.代表任意字元,所以ph6的第四個字不是數字也符合條件。

注意在方括弧[].就不代表任意字元了,而是代表"."這個字本身,觀察以下


String ph1 = new String("0932299311");
String ph2 = new String("0933884151");
String ph3 = new String("093.3AB6");

String regex = "^093[.]";
Pattern p = Pattern.compile(regex);
System.out.println(p.matcher(ph1).find()); // false
System.out.println(p.matcher(ph2).find()); // false
System.out.println(p.matcher(ph3).find()); // true

因為ph3的第四個字為".",所以才符合條件。

下面範例為條件符合日期格式yyyy/MM/ddyyyy.MM.ddyyyy-MM-dd的字串為true


String ph1 = new String("1981.08.07");
String ph2 = new String("1981-08-07");
String ph3 = new String("1981/08/12");
String ph4 = new String("19810812");
String ph5 = new String("106/12/31");
String ph6 = new String("2017/8/17");

String regex = "^\\d{4}[./-]\\d{2}[./-]\\d{2}$";
Pattern p = Pattern.compile(regex);
System.out.println(p.matcher(ph1).find()); // true
System.out.println(p.matcher(ph2).find()); // true
System.out.println(p.matcher(ph3).find()); // true
System.out.println(p.matcher(ph4).find()); // false
System.out.println(p.matcher(ph5).find()); // false
System.out.println(p.matcher(ph6).find()); // false

  • ^意思為字串開頭必須符合後面的規則。
  • \d的意思是任意數值,意思等於[0-9]\是Java的跳脫字元,所以要再加上一個\
  • {4}的意思是前個標記(\d)向後判斷4個字
  • [./-]的意思是要符合./-,因為.在方括弧[]內,.的實字而非任意字元。
  • 最後的$的意思是到字串的尾端必須符合前面的規則。

沒有留言:

張貼留言