Java的正規表示式(Regular Expression, regex)簡單用法如下
Pattern p = Pattern.compile("^he"); // Pattern.compile()的參數"^he"為正規表示式
Matcher m = p.matcher("hello world"); // matcher()的參數字串為要以正規表示式檢查的字串
System.out.println(m.find()); // 若檢查的字串的子字串符合正規表示式的規則,Matcher.find()回傳true
"^he"
是正規表示式的語法規則,用來檢查字串是否以"he"為開頭。
^
符號代表從字串的開頭來檢查後接的文字是否符合規則。
Pattern.compile()
建立一個正規表示式的Pattern物件,然後Pattern物件p呼叫matcher()
方法並傳入要檢查的字串取得Matcher物件 m,最後呼叫Matcher.find()
來執行檢查。
菜鳥工程師肉豬
要注意Matcher.matches()
和Matcher.find()
是有差別的,matches()
是將查詢字串的全部來做匹配,而find()
是將查詢字串的子字串來作匹配,例如以下
String regex = "^he";
String s = new String("hello world");
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
System.out.println(m.matches()); // => false
System.out.println(m.find()); // => true
因此matches()
和find()
的結果不同,matches()
是將整個"hello world"用正規表示式來匹配,所以回傳false, 而find()
是用"hello world"的子字串來做匹配,例如"he",所以回傳true。
String.matches()
的功能同Matcher.matches()
。
find()
在使用上要注意的另外一點是,如果之前已經找到一個匹配的結果,若再呼叫一次find()
,Matcher
是從前一次呼叫時未批配的第一個字元的位置開始查找,而不是從頭開始,例如以下
String regex = "^he";
String s = new String("hello world");
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
System.out.println(m.find()); // => true
System.out.println(m.find()); // => false
若要讓Matcher
從頭開始搜尋字串,呼叫Matcher.reset()
方法來重置
沒有留言:
張貼留言