初识java正则表达式

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.Pattern;
//验证一个字符串是否合法
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");
		}
	}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值