java正则表达式的初步
Java正则表达式
1、句点符号(.)
句点符号可以匹配所有的任意的字符,甚至是换行符。
正则表达式:t.n
匹配:tan, Ten, tin等等
?
但需要注意的是:句点符号只能匹配一个任意的字符。
如:t.n对teen的匹配为false
?
2、方括号符号([])
为了解决句点符号匹配范围过于广泛的这一问题,可以使用方括号[],里面指定的有意义的字符。只有方括号里面指定的字符才能匹配。
?
正则表达式:t[aeio]n
匹配: tan, Ten , tin, ton
?
同样,方括号中只能匹配一个字符。如上正则表达式???t[aeio]n??对taen的匹配为false
?
3、“或”符号
“或”符号的运算和方括号的使用相似,只是“或”可以对表达式中的字符分组,换句话说就是“或”可以匹配多个字符,而方括号只能匹配单个字符。
?
正则表达式:t(a|e|i|o|oo)n
匹配: tan, ten, tin ,ton , toon
?
4、表示匹配的次数的符号
下面的符号分别显示匹配的次数,这些符号用来确定紧靠该符号左边的符号的出现的次数
?
符号???????????????????? 次数
?*??????????????????????? 符号次数*0次或者多次+1次或者多次?0次或者1次{n}恰好n次{n,m}从n到m次
?
?
?
<!--EndFragment--><!--EndFragment--><!--EndFragment--><!--EndFragment-->?
5、“否”符号??“?^?”
“?^?”?边界匹配器,行的开头。如果用在方括号内,表示不像匹配的字符。
???
[^X][a-z]
第一个不能为X,后面跟一个a-z任意的一个字符
?
6、圆括号和空白符号
假设要从格式为“June?26?,?1987”的生日日期中提取出月份部分,用来匹配该日期的表达式可以如下图:
?[a-z]+\s+[0-9]{1,2} , \s*[0-9]{4}
?
如何提取出月份部分?只需要在月份周围加上一个圆括号创建一个组,然后用ORO?API?提取出它的值。修改后的正则表达式如下:
?
?([a-z]+)\s+[0-9]{1,2} , \s*[0-9]{4}
?
?
7、其他符号
下表是常见正则表示式创建的快捷符合。
符号等价的正则表达式\d[0-9]\D[^0-9]\w[A-Z0-9]\W[^A-Z0-9]\s[\t\n\r\f]?
如下面的例子:
可以将所有出现“[0-9]”的地方我们都可以用“\d”
?
?
1、[^abc]?任何字符,除了a、b、c???比如:匹配字符z?为true??。该表达式只能匹配单个字符,对?zz的匹配为false
2、[]?方括号里面的,匹配的是一个字符,
3、[a-d[m-p]]和[a-zA-Z]相似??并集
4、[a-z&&[zhu]]??交集??同时属于a-z和zhu其中的一个字符
[abc]a、b、c[^abc]除a、b、c外的[a-zA-Z]a到z,A-Z中的任意一个字符[a-d[m-p]]a到d,m到p中的任意一个字符[a-z&&[def]]a到z 和def相交的一个字符?????
?
?
?
横线?-??表示范围的定义?。0-9?表示范围0到9之间的任何数字
?
?
?
^?? 行的开头
$?? 行的结尾
?
?
?
用法:1、?^??行的开头。如、^A[0-9]?--------表示以A开头、后面接一个数字的串
??????2、?$??行的结尾,和?^?用法相似。?如一个以数字1开头,9结尾的手机号码:^1[0-9]{9}9$
?
?
?
public?static?boolean?test02(){
Pattern?p?=?Pattern.compile("([a-z]+)([0-9]+)");
Matcher?m?=?p.matcher("zhuyingming2009");
//m.find()匹配器与模式进行匹配,匹配成功返回true,否则返回false
if(m.find()?==?true){
//匹配成功后,可以用匹配器的group()方法获得组里的内容,
/**
?*??不带参数的group()是获得整个内容
?*??带参数的group(int?start)?start表示第几个组的内容,
?*??start为0时?和不带参数的group()获得的内容一样。
?*?*/
String?temp?=?m.group(2);
System.out.println("group?--->?"?+?temp);
}
boolean?result?=?m.matches();
return?result;
}
<!--EndFragment-->