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-->