java正则表达式应用
packagecom.itztc.demo;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassDemo{
publicstaticvoidmain(String[]args){
Stringstring="fsdfsdfdf<tr>"
+"<tdalign='center'class='orang'>07098</td>"
+"<tdwidth='35'align='center'class='yellow'>3</td>"
+"<tdwidth='26'align='center'class='yellow'>7</td>"
+"</tr>fsdfsdf";
StringregEx="<td(\\s*\\w*\\=*\\'*\\w*\\'*\\s*)*>\\d*";
//Pattern正则表达式的编译表示形式。
//publicstaticPatterncompile(Stringregex)将给定的正则表达式编译到模式中.参数:regex-要编译的表达式
//publicstaticPatterncompile(Stringregex,intflags)将给定的正则表达式编译到具有给定标志的模式中。
//参数:
//regex-要编译的表达式
//flags-匹配标志,可能包括CASE_INSENSITIVE、MULTILINE、DOTALL、UNICODE_CASE、CANON_EQ、UNIX_LINES、LITERAL和COMMENTS的位掩码
/*CASE_INSENSITIVE:启用不区分大小写的匹配。
MULTILINE:启用多行模式。在多行模式中,表达式^和$仅分别在行结束符前后匹配,或者在输入序列的结尾处匹配。默认情况下,这些表达式仅在整个输入序列的开头和结尾处匹配。通过嵌入式标志表达式(?m)也可以启用多行模式
DOTALL:启用dotall模式。在dotall模式中,表达式.可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。通过嵌入式标志表达式(?s)也可以启用dotall模式(s是"single-line"模式的助记符,在Perl中也使用它)。
UNICODE_CASE:启用Unicode感知的大小写折叠。指定此标志后,由CASE_INSENSITIVE标志启用时,不区分大小写的匹配将以符合UnicodeStandard的方式完成。默认情况下,不区分大小写的匹配假定仅匹配US-ASCII字符集中的字符。通过嵌入式标志表达式(?u)也可以启用Unicode感知的大小写折叠。指定此标志可能对性能产生影响。
CANON_EQ:启用规范等价。指定此标志后,当且仅当其完整规范分解匹配时,两个字符才可视为匹配。例如,当指定此标志时,表达式"a\u030A"将与字符串"\u00E5"匹配。默认情况下,匹配不考虑采用规范等价。不存在可以启用规范等价的嵌入式标志字符。指定此标志可能对性能产生影响。
UNIX_LINES:启用Unix行模式。在此模式中,.、^和$的行为中仅识别'\n'行结束符。通过嵌入式标志表达式(?d)也可以启用Unix行模式。
LITERAL:启用模式的字面值解析。指定此标志后,指定模式的输入字符串就会作为字面值字符序列来对待。输入序列中的元字符或转义序列不具有任何特殊意义。标志CASE_INSENSITIVE和UNICODE_CASE在与此标志一起使用时将对匹配产生影响。其他标志都变得多余了。不存在可以启用字面值解析的嵌入式标志字符。
COMMENTS:模式中允许空白和注释.此模式将忽略空白和在结束行之前以#开头的嵌入式注释。通过嵌入式标志表达式(?x)也可以启用注释模式。*/
Patternp=Pattern.compile(regEx,Pattern.DOTALL);
/*典型的调用顺序是
Patternp=Pattern.compile("a*b");
Matcherm=p.matcher("aaaaab");
booleanb=m.matches();
在仅使用一次正则表达式时,可以方便地通过此类定义matches方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
booleanb=Pattern.matches("a*b","aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。*/
//publicMatchermatcher(CharSequenceinput)创建匹配给定输入与此模式的匹配器。
Matcherm=p.matcher(string);//string为页面的HTML代码
/*matches方法尝试将整个输入序列与该模式匹配。
lookingAt尝试将输入序列从头开始与该模式匹配。
find方法扫描输入序列以查找与该模式匹配的下一个子序列*/
while(m.find()){
//System.out.println(Pattern.matches(regEx,string));
System.out.println(m.group(0).matches(regEx));
}
Stringall="^[\\u4E00-\\u9FA5\\uF900-\\uFA2D\\w]{1,6}$";
booleantf=Pattern.matches(all,"你好");
System.out.println(tf);
}
}