在新的JDK中加入了對使用正則表達式的模式匹配的支持。正則表達式是根據文本匹配模式的方法-類似于編譯器生成類文件的工作原理。
在正則表達式的上下文中,模式是序列的文本表示方法。例如,我們想知道一個字符序列中是否存在"money"這個詞,就可以使用模式money,
因為這是精確表示該字符串的方法。
?? 我們這樣來檢驗用戶輸入的是否為一合法的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格式!");
?}
}
一些常用的表達式格式:
文字(Literal): 表達式內任何不具有特殊意義的字符都被看做是一個文字,并與自身匹配。
量詞(Quantifier): 某些字符或者表達式,他們被用來計算一個文字或分組可以字符列中出現的次數,以便該序列與表達式匹配。
例:
? 表示出現一次或根本不出現。
* 表示出現零次或一次以上(含一次)。
+ 表示出現一次或多次。
字符類(Character class): 一個字符類就是方括號內的一個字符集,其中,匹配可以是括號內的任意一個字符。可以把字符和量詞結合起來,例如,[acegikmoqsuwy*]
??????????????????????? 將是只包含字母表中奇數字母的任意字符列。某些字符列是預先定義好的:
\d-數字(0到9)
\D-非數字
\s-空白字符,如制表符或換行符
\S-非空白字符
\w-單字符(a到z,A到Z,0到9以及下劃線)
\W-非單字字符(其他任意字符)
Posix 字符類(Posix character class): 某些字符僅在用于US-ASCII比較時才有效。
例如:
\p{Lower}-小寫字符
\p{Upper}-大寫字符
\p{ASCII}-所有ASCII字符
\p{Alpha}-字符字符(\p{Lower}與\p{Upper}相結合)
\p{Digit}-從0到9的數字
\p{Alnum}-字母數字字符
范圍(Range): 使用短線(dash)來指定范圍。例如:[A-J]表示從A到J的大寫字母。
否定(Negation): 使用脫字符^表示否定字符。例如:[^A-K]表示除A到K之外的任何字符。