您的位置:首页 > 编程语言 > Java开发

初识java正则表达式

2017-03-26 10:46 316 查看
1、比较两种代码

(1)不用正则表达式

package com.dengdi.regex;
//不用正则表达式
public class RegexDemo01 {
public static void main(String[] args) {
String str="0123456789";
boolean flag=false;
char[] chars=str.toCharArray();
for(int i=0;i<chars.length;i++){
if(chars[i]<'1'||chars[i]>'9'){
flag=true;
break;
}
}
if(flag){
System.out.println("不是由数字1~9组成");
}else{
System.out.println("是由数字1~9组成");
}
}
}
(2)使用正则表达式

package com.dengdi.regex;

import java.util.regex.Pattern;

public class RegexDemo02 {
public static void main(String[] args) {
String str="123456789";
if(Pattern.compile("[0-9]+").matcher(str).matches()){
System.out.println("是由数字组成!");
}else{
System.out.println("不是由数字组成!");
}
}
}

可以明显看见使用正则表达式的代码量要少些,使用的更方便。

2、介绍正则表达式

使用正则表达式离不开两个类,Pattern类和Matcher类,这里Pattern类主要是进行正则规范(如上面的代码中"[0-9]+"),而Matcher类主要是执行规范,验证字符串是否符合规范,其实从上面代码中也可以看出这两个类是属于java.util.Regex。

Pattern类常用方法(如果要取得Pattern类实例,必须使用compile()方法)

(1)public static Pattern compile(String regex)静态方法指定正则表达式规则并返回Pattern类

(2)public Matcher matcher(CharSequence input)返回Matcher类实例

注意:CharSequence 是个接口  已知所实现类:charBuffer,Segment,String,StringBuffer,StringBuilder

(3)public String[] split(CharSequence input)字符串拆分

Matcher类常用方法

(1)public boolean matches()执行验证

       (2)public String replaceAll(String replacement)字符串替换(所有都替换)

常用正则规范

(1)\\    表示反斜线(\)
字符\t    表示制表符

(2)\n   表示换行
[abc]    字符a,b或c

(3)[^abc]   表示除了a,b,c之外的任意字符
[a-zA-Z0-9]
表示由字母、数字组成

(4)\d表示数字
\D表示非数字

(5)\w表示字母、数字、下划线
\W表示非字母、数字、下划线

(6)\s表示所有空白字符(换行、空格等)
\S表示所有非空白字符

(7)^行的开头
$
行的结尾

(8).匹配除换行符之外的任意字符

数量表示(X表示一组规范)

(1)X必须出现一次
X?可以出现0次或1次

(2)X*可以出现0次、1次或多次
X+可以出现1次或多次

(3)X{n}必须出现n次
X{n,}必须出现n次以上
X{n,m}必须出现n~m次

逻辑运算符(X,Y表示一组规范)

XYX规范后跟着Y规范X|YX规范或Y规范(X)作为一个捕获组的规范

package com.dengdi.regex;

import java.util.regex.Matcher;
import java.util.regex.Patter
4000
n;
//验证一个字符串是否合法
public class RegexDemo03 {
public static void main(String[] args) {
String str="1983-07-27";
String regex="\\d{4}-\\d{2}-\\d{2}";//定义验证格式
Pattern pattern=Pattern.compile(regex);//实例化Pattern类
Matcher matcher=pattern.matcher(str);//验证字符串是否合法
if(matcher.matches()){     //使用正则验证
System.out.println("格式正确!");
}else{
System.out.println("格式不正确!");
}
}
}


package com.dengdi.regex;

import java.util.regex.Pattern;
//按照字符串的数字将字符串拆分
public class RegexDemo04 {
public static void main(String[] args) {
String str="A1B22C333D4444F55555E666666";
String regex="\\d+";
Pattern pattern=Pattern.compile(regex);
String[] strs=pattern.split(str);
for(int i=0;i<strs.length;i++){
System.out.println(strs[i]);
}
}
}
package com.dengdi.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;
//将全部的数字替换成"_"
public class RegexDemo05 {
public static void main(String[] args) {
String str="A1B22C333D4444F55555E666666";
String regex="\\d+";
Pattern pattern=Pattern.compile(regex);
Matcher matcher=pattern.matcher(str);
String newStr=matcher.replaceAll("_");//替换数字
System.out.println(newStr);
}
}

3、String类对正则表达式的支持

在String类中有3个方法支持正则表达式

(1)public boolean matches(String regex)字符串匹配

(2)public String replaceAll(String regex,String replacement)字符串替换

(3)public String[] split(String regex)字符串拆分

其实可以看出使用String类的方法比较方便许多

package com.dengdi.regex;

public class RegexDemo06 {
public static void main(String[] args) {
String str="A1B22C333D4444F".replace("\\d+", "_");
boolean temp="1996-01-22".matches("\\d{4}-\\d{2}-\\d{2}");
String[] strs="A1B22C333D4444F".split("\\d+");
System.out.println("字符串替换操作:"+str);
System.out.println("字符串验证操作:"+temp);
System.out.println("字符串拆分操作:");
for(int i=0;i<strs.length;i++){
System.out.print(strs[i]+"\t");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 正则表达式