武興睿
吉林科技職業(yè)技術(shù)學院計算機系,吉林長春 130123
Java中的正則表達式與模式匹配研究
武興睿
吉林科技職業(yè)技術(shù)學院計算機系,吉林長春 130123
正則表達式是代表具有特殊意義字符的字符串。在信息時代,我們從海量數(shù)據(jù)中尋找特定的信息時,正則表達式起到了至關重要的作用。正則表達式仿佛一個模板,將某個字符模式與所搜索的字符串進行匹配。在編寫程序時正則表達式也起著很重要的作用,應用廣泛。本文主要研究java中正則表達式的使用,及模式匹配。
正則表達式;模式匹配;Pattern類;Matcher類
正則表達式仿佛一個模板,將某個字符模式與所搜索的字符串進行匹配。在編寫程序時正則表達式也起著很重要的作用,應用廣泛。本文主要研究java中正則表達式的使用,及模式匹配。
1)static Pattern compile(String regex)
該靜態(tài)方法通過使用類名調(diào)用,返回一個Pattern類型的對象,并且將給定的正則表達式regex編譯到模式中。
舉例 1 :Pattern p ;p=Pattern.compile(“\dabcd\d”);
2)Matcher matcher(CharSequence input)
使用Pattern類的對象調(diào)用該方法,返回一個Matcher類型的對象,其主要作用是用在input中待匹配的字符序列初始化匹配對象。
舉例 2 :Matcher m;m=p.matcher(“aaa1abcd2bbb”);
3)static Boolean matches(String regex,CharSequence input)
使用類名調(diào)用該方法,判斷input是否與regex正則表達式匹配。
舉例3:Pattern.matches(“\dabcd\d”, “aaa1abcd2bbb”);
//結(jié)果返回 true。
4)String pattern()
用對象調(diào)用,返回在其中編譯過此模式的正則表達式。
舉例 4 :Pattern p = Pattern.compile(“\dabcd\d”);
p.pattern();
//結(jié)果返回字符串“\dabcd\d”。
5)String[] split(CharSequence input);
用對象調(diào)用該方法,返回一個字符串數(shù)組,數(shù)組中的每個元素都是input中被該模式對象拆分的字符串。
舉例 5:Pattern p = Pattern.compile(“:”);
String arry[]=p.split(“a:bcd:ef”);
//結(jié)果 :arry[0]=”a”,arry[1]=”bcd”,arry[2]=”ef”。
主要方法:
1)public boolean find()
使用模式對象調(diào)用該方法,嘗試查找與該模式匹配的輸入序列的下一個子序列。若找到返回true,否則返回false。
舉例 6 :Pattern p=Pattern.compile(“\dabcd\d”);
Matcher m = p.matcher(“12abcd3fcsd);
If(m.find()){System.out.print(“ok”);}
//m調(diào)用find()方法,找到與之匹配的子序列“2abcd3”,程序?qū)⑤敵觥皁k”。
說明:該方法始于匹配器區(qū)域的開頭,如果該方法的前一次調(diào)用成功,并且沒有重置,則下一次調(diào)用時從上次沒有匹配的第一個字符開始。例如在上例中下一次匹配時從字符“f“處向后查找。
2)public boolean find(int start)
使用模式對象調(diào)用該方法,該方法重置匹配器,嘗試查找匹配該模式、從指定索引start處開始的輸入序列的下一個子序列。
舉例 7 :Pattern p=Pattern.compile(“\dabcd\d”);
Matcher m = p.matcher(“12abcd3fcsd);
If(m.find(3)){System.out.print(“ok”);}
//程序結(jié)果沒有輸出“ok“。將從字符”b”處查找匹配的子序列。
3)public int start()
使用模式對象調(diào)用該方法,返回以前匹配的初始索引。
4)public int end()
使用模式對象調(diào)用該方法,返回最后匹配字符之后的偏移量。
5)public String group()
使用模式對象調(diào)用該方法,返回由以前匹配操作所匹配的輸入子序列。
舉例 8 : Pattern p=Pattern.compile(“\dabcd\d”);
Matcher m = p.matcher(“12abcd3fcsd);
m.find();
System.out.println(m.start+”---”+m.end()+”,”+m.group())
//結(jié)果 1---6,2abcd3。
6)public String replaceAll(String replacement)
使用模式對象調(diào)用該方法,替換模式與給定替換字符串相匹配的輸入序列的每個子序列。
舉例 9 :Pattern p=Pattern.compile(“\dabcd\d”);
Matcher m = p.matcher(“12abcd3fcsd);
System.out.print(m.replaceAll(“***”));
//結(jié)果 :1***fcsd。
7)public boolean matches()
使用模式對象調(diào)用該方法,嘗試將整個字符串與模式匹配。若完全匹配返回true,否則返回false。
舉例 10:Pattern p=Pattern.compile(“\dabcd\d”);
Matcher m = p.matcher(“1abcd3);
Matcher m1 = p.matcher(“2abcd33”);
If(m.matches()) System.out.print(“ok”);
If(m1.matches()) System.out.print(“ok111”);
//程序結(jié)果輸出 “ok“。
1)代表單個字符的元字符
元字符在正則表達式中的寫法 意義.“.” 代表任意一個字符d “\d” 代表0—9的任何一個數(shù)字D “\D” 代表任何一個非數(shù)字字符s “\s” 代表空格類字符:’ ’ ‘ ’ ‘x0B’ ‘f’ ‘ ’S “\S” 代表非空格類字符w “\w” 代表可用于標識符的字符(不包括美元符號)W “\W” 代表不能用于標識符的字符
2)限定符模式
帶限定符號的模式 意義 帶限定符號的模式 意義X? X出現(xiàn)0次或1次 X{n} X恰好出現(xiàn)n次X* X出現(xiàn)0次或多次 X{n,} X至少出現(xiàn)n次X+ X出現(xiàn)1次或多次 X{n,m} X出現(xiàn)n次至m次
1)Email正則表達式的書寫。
Pattern emailer = Pattern.compile("\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
2)電話號碼正則表達式的書寫。
Pattern tel = Pattern.compile("\d{3,4}-\d{7,8}|\d{11}");
[1]java大學實用教程.清華大學出版社.
[2]java 2 編程思想.
TP301.2
A
1674-6708(2011)48-0180-02