JAVA SE 程序设计--正则表达式

正则表达式简介
正则表达式是按照一定规范构造的特殊字符串,用来描述特定的字符串模式,经常用于字符串的匹配与合法性校验等。
在正则表达式中,有些字符具有特殊的含义,如表1、表2所示。其中表1是常用的元字符表,运用其中的字符可以构造具有特定含义的正则表达式;表2是常用量词表,用于限定正则表达式中字符出现的次数。
这里写图片描述

这里写图片描述
**注意:**由于“.”在正则表达式中是代表任何一个字符,若要在正则表达式中使用点字符本身,表示为[.]或56。反斜线字符‘\’用于引用转义构造,\与单个反斜线匹配,而{与左括号匹配。
在正则表达式中可以用“[]”将若干字符括起来表示一个元字符。如:

[abc]:代表a、b、c中的任意一个字符。
[^abc]:代表除了a、b、c之外的任何字符。
[a-zA-Z]:代表a到并集z或A-Z的中任何一个字符。
[a-c[h-j]]:代表a、b、c、h、i、j中的任何字符(并集)。
[a-z&&[hij]]:代表h、i、j中的任何一个字符(交集)。
[a-g&&[^b-d]]:代表a、e、f、g中的任意一个字符(差集)。

以上所述的各种元字符、量词等都只是具有特定含义的组成正则表达式的基本字符,实际应用中要将这些字符有机组合,并置于双引号中形成字符串才是正则表达式。
例1.正则表达式测试

package JAVA_SE;

public class ch7_12 {

	public static void main(String[] args) {
		String s = new String("a");
		System.out.println(s.matches("[abc]"));// true
		System.out.println(s.matches("\\p{Lower}"));// true
		System.out.println("a".matches("[abc]"));// true
		System.out.println("b".matches("[^abc]"));// false
		System.out.println("k".matches("[a-zA-Z]"));// true
		System.out.println("D".matches("[A-Z]&&[F-P]"));// false
		System.out.println("\t\n\f\r".matches("\\s{4}"));// true
		System.out.println("!.?".matches("\\p{Punct}+"));// true
		System.out.println("abc_123".matches("\\w{7}"));// true

	}

}

Pattern与Matcher类

java.util.regex包中的Pattern与Matcher类提供了一些列处理正则表达式的方法。Pattern类的对象代表了一个以字符串形式指定的正则表达式。以字符串形式指定的正则表达式,必须先编译成Pattern类的实例。生成的模式用于创建Matcher对象,Matcher对象可以根据正则表达式与任意字符序进行匹配。使用步骤:

(1)使用正则表达式regex做参数创建得到一个Pattern对象pattern。如:Pattern pattern= Pattern.compile(regex);
(2)对象pattern调用matcher(CharSequence input)方法返回Matcher对象matcher,如:Matcher matcher=pattern.matcher(input);其中,input表示带匹配的字符序列。
(3)Matcher对象matcher可以使用下列方法寻找字符串input中是否有和正则表达式regex匹配的子序列。

  • public boolean find():寻找input和regex匹配的下一子序列,如果成功该方法返回true,否则返回false。
  • public String group():返回和regex匹配的子序列。
  • public boolean matches():判断input是否完全和regex匹配。
  • public boolean lookingAt():判断从input的开始位置是否有和regex匹配的子序列。
  • public String replaceAll(String replacement):以参数replacement指定的字符串替换input中与regex匹配的所有子串,并返回替换后的字符串。

例2判断一个字符串是否是由纯数字字符组成的。

package JAVA_SE;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
public class ch7_13 {
	public static void main(String[] args) {
		Pattern p;
		Matcher m;
		String regex="[0-9]+";//正则表达式
		String input=JOptionPane.showInputDialog("请输入一个字符串:");
		p=Pattern.compile(regex);//编译正则表达式
		m=p.matcher(input);//模式匹配
		if(m.matches()) {//若匹配
			JOptionPane.showConfirmDialog(null, "该字符串是由纯字符组成的!");
		}else {
			JOptionPane.showConfirmDialog(null, "该字符串含有非数字字符!");
		}		
	}
}

例3校验用户的手机号码和QQ的号码合法性。

package JAVA_SE;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ch7_14 {
	private static Scanner scan;
	public static void main(String[] args) {		
		Pattern p;
		Matcher m;
		/*检验手机号的正则表达式*/
		String regex="((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}";
		/*检验qq号码的正则表达式*/
		String regex1="[1-9][0-9]{4,}";
		scan = new Scanner(System.in);
		System.out.println("请输入你的手机号码:");
		String phoneNumber=scan.nextLine();//读入手机号
		p=Pattern.compile(regex);
		m=p.matcher(phoneNumber);
		if(m.matches()) {
			System.out.println("一个合法的手机号码!");
		}else {
			System.out.println("非法的手机号码!");
		}
		System.out.println("请输入的你的QQ号码!");
		String QQNumber=scan.nextLine();//读入QQ号码
		p = Pattern.compile(regex1);
		m = p.matcher(QQNumber);
		if(m.matches()) {
			System.out.println("一个合法的QQ号码!");
		}else {
			System.out.println("非法的QQ号码!");
		}		
	}
}

例4文本查找与替换。

package JAVA_SE;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ch7_15 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "apple 苹果 banana 香蕉 orange 橘子";
		String regex = "\\w+"; // 匹配英文字符的正则表达式
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(str);
		System.out.println("提取的内容为:");
		String s1 = null;
		String s2 = null;
		while (matcher.find()) { // 寻找input与regex匹配的下一子序列
			s1 = matcher.group(); // 获取每个与regex匹配的子串
			System.out.print(s1 + " ");// 输出每个与regex匹配的子串
		}
		System.out.println();
		while (matcher.matches()) {
			System.out.println("完全匹配!");
		}
		if (matcher.lookingAt()) {
			s2 = matcher.replaceAll(" ");
			System.out.println(s2);
		}
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值