手工分詞稍嫌麻煩,不好維護,而利用正則表達式就利索多了。Java提供了java.util.regex.Matcher,java.util.regex.Pattern類來幫助我們實現此功能。
例一:以下程序將把"This is a farm that that raises dairy cattle."中的單詞一個個找出來。
package com.hy; import java.util.regex.Matcher; import java.util.regex.Pattern; public class RexTest { public static void main(String[] args){ String input = "This is a farm that raises dairy cattle."; String regExp = "(\\w+)"; Pattern pattern=Pattern.compile(regExp); Matcher matcher=pattern.matcher(input); while(matcher.find()){ System.out.println(matcher.group(0));// 在這里使用matcher.group(0)和matcher.group(1)效果是一樣的 } } }
輸出如下:
This
is
a
farm
that
raises
dairy
cattle
例二:以下程序將找出算術表達式中的數字和符號。由於算術表達式中的+-*/()在正則表達式里都有自己含義,如+表示一個或多個,因為需要直接表示符號本身時采用\\進行轉義。
String input = "1+2+34*(5+78)/2"; String regExp = "(\\d+)|(\\+)|(\\-)|(\\*)|(\\/)|(\\()|(\\))"; Pattern pattern=Pattern.compile(regExp); Matcher matcher=pattern.matcher(input); while(matcher.find()){ System.out.println(matcher.group(0)); }
輸出:
1 + 2 + 34 * ( 5 + 78 ) / 2
例三:在例二的基礎上,增加小數的識別。正則表達式\\d+(\\.*)\\d*代表整數或者小數,如0.2,5,34.09都能識別出來。
String input = "1.1+0.2+34.09*(5+78)/0.0002"; String regExp = "(\\d+(\\.*)\\d*)|(\\+)|(\\-)|(\\*)|(\\/)|(\\()|(\\))"; Pattern pattern=Pattern.compile(regExp); Matcher matcher=pattern.matcher(input); while(matcher.find()){ System.out.println(matcher.group(0)); }
輸出:
1.1 + 0.2 + 34.09 * ( 5 + 78 ) / 0.0002
例四:找出SQL語句中關鍵字,字段和條件
[A-Z_a-z][A-Z_a-z0-9]*表示以大小寫字母或下划線開頭之后可以是數字,字母,下划線之一
(=)*表示可以出現0個或一個等號
(\\')*表示出現0個或一個單引號
(\\')*\\w*(\\')*表示引號中間可以為字符
String input = "select field1,field2,field3 from table1 where field1='1' order by field2 "; String regExp = "([A-Z_a-z][A-Z_a-z0-9]*(=)*(\\')*\\w*(\\')*)"; Pattern pattern=Pattern.compile(regExp); Matcher matcher=pattern.matcher(input); while(matcher.find()){ System.out.println(matcher.group(0)); }
輸出:
select field1 field2 field3 from table1 where field1='1' order by field2
--END--2019年9月3日09點50分