在新的JDK中加入了對(duì)使用正則表達(dá)式的模式匹配的支持。正則表達(dá)式是根據(jù)文本匹配模式的方法-類似于編譯器生成類文件的工作原理。
在正則表達(dá)式的上下文中,模式是序列的文本表示方法。例如,我們想知道一個(gè)字符序列中是否存在"money"這個(gè)詞,就可以使用模式money,
因?yàn)檫@是精確表示該字符串的方法。
?? 我們這樣來檢驗(yàn)用戶輸入的是否為一合法的email地址:
Code:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class TestRegex
{
?public boolean isEmail(String email)
?{
???????????? //指定使用的模式
??Pattern pattern=Pattern.compile
??????????? ("\\p{Digit}+@\\w+\\.\\p{Alpha}{2,3}");
??String[] words=pattern.split(email);
??Matcher matcher=pattern.matcher(email);
??if(matcher.find()&&words.length==0)
??? return true;
??else
??? return false;
?}
}
來看怎么用它:
Code:
public class Client
{
?public static void main(String[] args)
?{
??TestRegex regex=new TestRegex();
??String s1="DuYang163@gmail.com";
??String s2="feiyang@126.123.com";
??System.out.println(s1+(regex.isEmail(s1)?"是":"不是")+"Email格式!");
??System.out.println(s2+(regex.isEmail(s2)?"是":"不是")+"Email格式!");
?}
}
一些常用的表達(dá)式格式:
文字(Literal): 表達(dá)式內(nèi)任何不具有特殊意義的字符都被看做是一個(gè)文字,并與自身匹配。
量詞(Quantifier): 某些字符或者表達(dá)式,他們被用來計(jì)算一個(gè)文字或分組可以字符列中出現(xiàn)的次數(shù),以便該序列與表達(dá)式匹配。
例:
? 表示出現(xiàn)一次或根本不出現(xiàn)。
* 表示出現(xiàn)零次或一次以上(含一次)。
+ 表示出現(xiàn)一次或多次。
字符類(Character class): 一個(gè)字符類就是方括號(hào)內(nèi)的一個(gè)字符集,其中,匹配可以是括號(hào)內(nèi)的任意一個(gè)字符。可以把字符和量詞結(jié)合起來,例如,[acegikmoqsuwy*]
??????????????????????? 將是只包含字母表中奇數(shù)字母的任意字符列。某些字符列是預(yù)先定義好的:
\d-數(shù)字(0到9)
\D-非數(shù)字
\s-空白字符,如制表符或換行符
\S-非空白字符
\w-單字符(a到z,A到Z,0到9以及下劃線)
\W-非單字字符(其他任意字符)
Posix 字符類(Posix character class): 某些字符僅在用于US-ASCII比較時(shí)才有效。
例如:
\p{Lower}-小寫字符
\p{Upper}-大寫字符
\p{ASCII}-所有ASCII字符
\p{Alpha}-字符字符(\p{Lower}與\p{Upper}相結(jié)合)
\p{Digit}-從0到9的數(shù)字
\p{Alnum}-字母數(shù)字字符
范圍(Range): 使用短線(dash)來指定范圍。例如:[A-J]表示從A到J的大寫字母。
否定(Negation): 使用脫字符^表示否定字符。例如:[^A-K]表示除A到K之外的任何字符。