java正则表达式
packagecom.cxtt.test;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassTestZhengze{
publicstaticvoidmain(String[]args){
//完全匹配”^[1-9][0-9]{4,}$”
//部分匹配”[1-9][0-9]{4,}”
if(matcherRegularExpression(“^[1-9][0-9]{4,}$”,”910618858a”)){
System.out.println(“输入正确”);
}else{
System.out.println(“输入错误”);
}
}
//匹配正则表达式方法
publicstaticbooleanmatcherRegularExpression(StringregEx,Stringstr){
Patternpattern=Pattern.compile(regEx);
Matchermatcher=pattern.matcher(str);
booleanfound=false;
while(matcher.find()){
//System.out.println(“发现\””+matcher.group()+”\”开始于”
//+matcher.start()+”结束于”+matcher.end());
found=true;
}
returnfound;
}
}
java正则表达式精确匹配
第一次接触到正则表达式是在书上,刚开端感觉这也许就仅仅界说了一下,没什么用,就没怎么多看。知道后来做项目的时分才发现,这东西,是非常便利好用的一个办法。
正则表达式是干什么的呢?
正则表达式:契合一定规则的表达式
作用:用于专门操作字符串
好处:能够简化对字符串的杂乱操作
下面举一个详细的实例:
需求:校验qq号码。要求qq号只能5至13位,只能是数字,第一个数字不能以0开头
或许很多人看到这个,很简单啊,然后开端疯狂写代码。
咱们来看看正常思路
publicbooleancheckQQ(Stringqq){
booleanflag=true;
intlen=qq.length();
if(len<5||len>15){
flag=false;
}
//startWith()是String的一个办法,回来boolean类型if(qq.startsWith(“0″)){
flag=false;
}
char[]arr=qq.toCharArray();
for(inti=0;i
if(!(i>=’0’&&i
flag=false;
break;
}
}
returnflag;
}
//其间查验满是有数字构成有这样的办法。try{
longl=Long.parseLong(qq);//假如呈现数字之外的会抛出异常}catch(NumberFormatExceptione){
flag=false;
}
下面看一看假如使用正则表达式来判别
publicbooleancheckQQ(Stringqq){
Stringregex=”[1-9][0-9]{4-14}”;
returnqq.matches(regex);
}
能够很明显的看出差距。
这还是比较简单的校验规则,假如再杂乱一点的话愈加能够体现出正则表达式的便利之处
下面来详细讲一讲正则表达式:
1.匹配:Stringmatches办法
调用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,并且[]括号能够省掉掉。
需求:两个字符第一个是字母第二个是数字
Stringregex=”[a-zA-Z][0-9]”;
意味着只能有两个字符a至z,A至Z,0至9.
需求:第一个字母只能是abc傍边的一个
Stringregex=”[abc]”;
需求:第一个字母不能是abc傍边的一个
Stringregex=”[^abc]”;//加了一个符号^
需求:第一个字母是b至k的
Stringregex=”[b-k]”;
预界说字符类:
预界说字符类:.
任何字符(与行结束符或许匹配也或许不匹配)\d
数字:[0-9]\D
非数字:[^0-9]\s
空白字符:[\t\n\x0B\f\r]\S
非空白字符:[^\s]\w
单词字符:[a-zA-Z_0-9]\W非单词字符:[^\w]
那咱们该怎么书写呢?
比方第一个字符要求是数字
Stringregex=”\\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位。
Stringregex=”\\d{6,9}”;即可
其实正则中的数量词有Greedy(贪婪)、Reluctant(懒散)和Possessive(侵占)三种。
Greedy(贪婪)数量词使用的频率高一点。
这儿就不做过多说明。