java ismatch_java中正则表达式的运用及示例

限定符(量词):

*表示零次或多次,+表示至少一次,?表示最多一次。{n}表示n次,{n,}表示至少n次。

中括号表达式:

[]表示或. 如[afg]表示一个为a或者f或者g的字母。

中括号内的-表示范围。[0-9]表示数字0到9中的一个,[0-9]+表示至少一个数字。

[A-Za-z]表示一个任意字母。[A-Za-z]+表示任意多个字母。

中括号内的^表示非。[^xyz]表示任意不包含xyz的字符。比如123,abc之类的。

中括号表达式的匹配示例如下:

String str="abdf1459";

//匹配4个小写字母,接着是4个数字

String regex="[a-z]{4}[0-9]{4}";

if (str.matches(regex)) {

System.out.println(true);

}

此处的str.matches(regex)相当于:

Pattern p = Pattern.compile(regex);

Matcher m = p.matcher(str);

if(m.matches()){

//...

}

中括号表达式的替换示例如下:

String test="123xyz456abc";

//将xyz和abcd这些字母,都替换成0

//String result = test.replaceAll("[x-za-d]", "0");

//将所有的非数字,都替换成0

String result = test.replaceAll("[^0-9]", "0");

System.out.println(result);

小括号

(xyz) 字符组,按照确切的顺序匹配字符xyz。

元字符:

.

.可以匹配除换行符之外的任何单字符。比如.*表示任意个非换行符\n的字符。

String str="abcdddabc";

// .*c+.*则表示以任意非换行符\n开始,中间包含至少一个c字符,并且以任意非\n字符结束。

String regex=".*c+.*";

if (str.matches(regex)){

System.out.println(true);

}

|

| 表示或。

比如 x|y ,可以匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。

^和$

^匹配字符串的开始位置。而$匹配字符串的结尾位置。

^cat : 验证该行以c开头紧接着是a,然后是t。

cat$ : 验证该行以t结尾倒数第二个字符为a倒数第三个字符为c。

^cat$ : 以c开头接着是a->t然后是行结束:只有cat三个字母的数据行。

匹配的示例,如下所示:

String str="catdog";

//regex只能匹配cat

String regex="^cat$";

//regex2可以匹配cat开头的字符串

//.*表示任意个非换行符\n的字符

String regex2="^cat.*";

//regex3可以匹配dog结尾的字符串

String regex3=".*dog$";

boolean isMatch1=str.matches(regex);

boolean isMatch2=str.matches(regex2);

boolean isMatch3=str.matches(regex3);

System.out.println(isMatch1+","+isMatch2+","+isMatch3);

替换的示例,如下:

public static void replaceEnd() {

String test = "123.456.789....";

//替换掉末尾的点号

//[.]表示匹配符号点. 而+号表示至少一个,$表示末尾位置。如果去掉了$,那么所有的点号都会被替换掉。

String result = test.replaceAll("[.]+$", "");

//结果为123.456.789

System.out.println(result);

}

\d

由于元字符一般会放在字符串中,所以需要转义,也就是\会变成 \\ ,而\d在字符串中会变成\\d。

\d表示一个整数,\d{4}表示4个整数,\d+表示任意个整数。\D+表示任意个非整数

\d{4}-\d{2}-\d{2}表示年月日,比如2016-05-05 。

匹配示例如下:

String str="2016-05-05";

String regex="\\d{4}-\\d{2}-\\d{2}"

if (str.matches(regex)){

System.out.println(true);

}

替换示例如下:

String test="123abc45def";

//替换掉所有数字

String result=test.replaceAll("\\d","");

//结果为替换后的结果为 "abcdef"

System.out.println(result);

\s

\s表示一个空白字符(如空格、制表符、换页符等等),\s+表示任意多的空白字符。

String regex="\\s"

\S

\S表示任何一个非空白字符。\S+表示任意多的非空白字符。

String regex="\\S"

\p

\p{Upper}{2}表示2个大写字母。\p{Lower}{3}表示3个小写字母。

String regex="\\p{Upper}{2}\\p{Lower}{3}\\d{4}"

\w

\w 匹配字母或数字或下划线或汉字

\W

\W 不匹配字母或数字或下划线或汉字

匹配/替换特殊字符:

在正则表达式中,想要匹配+[.?^{|\这些特殊字符,需要在前面加上一个\ 。

比如通过 \. 去匹配.号,用\\\\去匹配\。

当然,也可以直接放到中括号里面,比如[.]就相当于"\\."

简单的替换特殊字符,如下:

public static void replaceStr() {

String test="123\\456.789";

String result = test.replaceAll("\\\\", "").replaceAll("\\.", "");

//结果为123456789

System.out.println(result);

}

正则表达式中包含特殊字符的示例,如下:

public static void replaceStr() {

String test="123$456\\$789$123";

//替换所有的$,但是不替换\$

//"[^\\\\]\\$",中括号内的^表示非,而\\\\表示特殊字符\,[$]表示符号$

System.out.println(test.replaceAll("[^\\\\][$]",""));

//结果为 12456\$78123

}

前瞻,后顾,负前瞻,负后顾

A(?=B) 前瞻(Look ahead positive):

匹配的是A,限制条件是A的后面是B,即AB。

(?<=B)A 后顾(Look behind positive ):

匹配表达式A,限制条件A的前面是B,即BA

A(?!B) 负前瞻(Look ahead negative):

顾名思义,该正则匹配A,限制条件是A后面不是B

(?

匹配表达式A,限制条件是A的前面不是B

常用正则表达式

正数或者小数,第一位不为零。

[1-9]+[0-9]*([.][0-9]+)?

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值