[Java]使用正則表達式實現分詞


手工分詞稍嫌麻煩,不好維護,而利用正則表達式就利索多了。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分


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM