50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > java正则表达式匹配_java正则表达式(匹配)

java正则表达式匹配_java正则表达式(匹配)

时间:2019-05-26 13:54:38

相关推荐

java正则表达式匹配_java正则表达式(匹配)

第一次接触到正则表达式是在书上,刚开始感觉这也许就只是定义了一下,没什么用,就没怎么多看。知道后来做项目的时候才发现,这东西,是非常方便好用的一个方法。

正则表达式是干什么的呢?

正则表达式:符合一定规则的表达式

作用:用于专门操作字符串

好处:可以简化对字符串的复杂操作

下面举一个具体的实例:

需求:校验qq号码。要求qq号只能5至13位,只能是数字,第一个数字不能以0开头

可能很多人看到这个,很简单啊,然后开始疯狂写代码。

我们来看看正常思路

public boolean checkQQ(String qq){

boolean flag=true;

int len=qq.length();

if(len<5||len>15){

flag=false;

}

//startWith()是String的一个方法,返回boolean类型if(qq.startsWith("0")){

flag=false;

}

char[] arr=qq.toCharArray();

for(int i=0;i

if(!(i>='0'&&i

flag=false;

break;

}

}

return flag;

}

//其中检验全是有数字构成有这样的方法。try{

long l=Long.parseLong(qq);//如果出现数字之外的会抛出异常}catch(NumberFormatException e){

flag=false;

}

下面看一看如果利用正则表达式来判断

public boolean checkQQ(String qq){

String regex="[1-9][0-9]{4-14}";

return qq.matches(regex);

}

可以很明显的看出差距。

这还是比较简单的校验规则,如果再复杂一点的话更加能够体现出正则表达式的方便之处

下面来具体讲一讲正则表达式:

1.匹配:String matches方法

调用String 中的matches()方法,返回的是一个boolean类型的值

JAVA中定义了很多种匹配格式,可以在API文档中查询

我这里书写几种常见的:字符类[abc]

a、b 或 c(简单类)[^abc]

任何字符,除了 a、b 或 c(否定)[a-zA-Z]

a 到 z 或 A 到

Z,两头的字母包括在内(范围)[a-d[m-p]]

a 到 d 或 m 到

p:[a-dm-p](并集)[a-z&&[def]]

d、e 或 f(交集)

[a-z&&[^bc]]

a 到 z,除了 b 和

c:[ad-z](减去)[a-z&&[^m-p]]

a 到 z,而非 m 到

p:[a-lq-z](减去)

//这里 [abc]只写了3个,写个个数是自己定的,比如也可以[adoenvj]等等。

//也可以写[1]表示只能为1,并且[ ]括号可以省略掉。

需求:两个字符 第一个是字母 第二个是数字

String regex="[a-zA-Z][0-9]";

意味着只能有两个字符a至z,A至Z,0至9.

需求:第一个字母只能是 abc当中的一个

String regex="[abc]";

需求:第一个字母不能是abc当中的一个

String regex="[^abc]";//加了一个符号^

需求:第一个字母是b至k的

String regex="[b-k]";

预定义字符类:

预定义字符类:.

任何字符(与行结束符可能匹配也可能不匹配)\d

数字:[0-9]\D

非数字: [^0-9]\s

空白字符:[ \t\n\x0B\f\r]\S

非空白字符:[^\s]\w

单词字符:[a-zA-Z_0-9]\W 非单词字符:[^\w]

那我们该怎么书写呢?

比如第一个字符要求是数字

String regex="\\d"; //注意要有写成\\d ,不能写成\d因为\后面的会被视作转义字符

\w该什么时候用呢?可以看到它的作用是该字符是数字或字母或下划线

这不正是注册邮箱时的要求吗,直接写个\w,多省事

Greedy 数量词X?

X,一次或一次也没有X*

X,零次或多次X+

X,一次或多次X{n}

X,恰好 n 次X{n,}

X,至少 n 次X{n,m}

X,至少 n 次,但是不超过 m 次

这个怎么使用呢,这是是判断前一个字符的出现次数

例如:要求全是数字,6至9位。

String regex="\\d{6,9}";即可

其实正则中的数量词有Greedy (贪婪)、Reluctant(懒惰)和Possessive(强占)三种。

Greedy(贪婪)数量词使用的频率高一点。

这里就不做过多说明。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。