在java中运用正则表达式

很多编程语言都有自己的正则表达式。感觉大致差不多。但也有自己的特点。记录一下正则表达式在java中的用法
一、语法
1、句点符号
“.”是一个通配符,匹配所有字符,包括空格、Tab字符甚至换行符
eg:a.b 匹配 aab或abb或acb或adb等等

2、方括号符号
“[]”是一个范围匹配方式,只有方括号里面指定的字符才参与匹配,在方括号之内你只能匹配单个字符:
eg:[abcd]x 可以匹配ax或bx或cx或dx,而不能匹配abx等


3、圆括号符号
“()”可以指定一组表达式
eg:([abc]*)([01234]*)

4、或符号
“|”基本就是“或”运算。因为方括号只允许匹配单个字符,这里必须使用圆括号“()”。
eg:x(a|b|c)y 或以匹配 xay或xby或xcy

5、否符号
“^”表示不想要匹配的字符
eg:[^0-9]匹配非0到9这些数字的其它字符

6、匹配次数的符号
[quote]
* 0次或多次
+ 1次或多次
? 0次或1次
{n} 恰好n次
{n,m} 从n次到m次
[/quote]


7、连字符号
“-”有着特殊的意义,它表示一个范围,比如从0到9。
eg:[a-z0-9] 匹配 a到z或0到9的字符

假设我们要在文本文件中搜索美国的社会安全号码。这个号码的格式是999-99-9999。用来匹配它的正则表达式如图一所示。在正则表达式中,连字符(“-”)有着特殊的意义,它表示一个范围,比如从0到9。因此,匹配社会安全号码中的连字符号时,它的前面要加上一个转义字符“\”。
[img]/upload/attachment/58764/bc57ff1b-06d0-3ec0-99d3-7e22626fe45b.gif[/img]
图一:匹配所有123-12-1234形式的社会安全号码


假设进行搜索的时候,你希望连字符号可以出现,也可以不出现——即,999-99-9999和999999999都属于正确的格式。这时,你可以在连字符号后面加上“?”数量限定符号,如图二所示:

[img]/upload/attachment/58766/952d6358-4483-310e-81f6-1c78e1a2c1fc.gif[/img]
图二:匹配所有123-12-1234和123121234形式的社会安全号码

下面我们再来看另外一个例子。美国汽车牌照的一种格式是四个数字加上二个字母。它的正则表达式前面是数字部分“[0-9]{4}”,再加上字母部分“[A-Z]{2}”。图三显示了完整的正则表达式。

[img]/upload/attachment/58768/4347975b-dd10-3c23-9ab6-96e677a658f1.gif[/img]
图三:匹配典型的美国汽车牌照号码,如8836KV


8、其它符号
\d 相当 [0-9]
\D 相当 [^0-9]
\w 相当 [A-Z0-9]
\W 相当 [^A-Z0-9]
\s 相当 [\t\n\r\f]
\S 相当 [^\t\n\r\f]

二、一些实例
首先我们来看看IP地址。IP地址有4个字节构成,每一个字节的值在0到255之间,各个字节通过一个句点分隔。因此,IP地址中的每一个字节有至少一个、最多三个数字。图八显示了为IP地址编写的正则表达式:

[img]/upload/attachment/58775/59f76ec8-1e3a-3904-a409-e217b6fcdd7e.gif[/img]
图八:匹配IP地址


三、在java中处理表达式

String patternString = "\\s*\\p{Punct}\\s*";
try{
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(input);
if (matcher.matches()){
//...
}
}catch (PatternSyntaxException e){
//...
}



例子及图片有些是从网上收集的,在些向原创者表示感谢!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值