正则表达式(Java)

概念

正则表达式定义字符串的搜索模式

正则表达式的英文全称是regular expression。搜索模式可以是简单字符,固定字符串或包含描述模式的特殊字符的复杂表达式的任何内容

由正则表达式定义的 pattern 可以同时匹配一个或多个,或者一个都没匹配到

正则表达式可用于搜索,编辑和操作文本

使用正则表达式分析或修改文本的过程称为:正则表达式应用于文本/字符串

由正则表达式定义的模式从左到右应用于文本。

Pattern 类:

pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类:

Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException

PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误

 查询字符串是否存在所要求的子字符串

import java.util.regex.Pattern;

public class PatternMethod {

	public static void main(String[] args) {
		String s = "fwqwqwaegrhgfngjnuyjhk";
		String pattern = ".*fng.*";//.任意字符串   *任意长度,查找”····fng·····“
		String pattern1 = "fw.*";//fw开头+后面多少个任意字符都行 查找“fw···········”
		String pattern2 = ".+wa.*";//任意字符多少个+wa+任意字符多少个 查找”····wa·····“
		String pattern3 = ".+nuy.+";//任意字符多少个+nuy+任意字符多少个查找”····nuy·····“
		String pattern4 = ".+jhk";//前面多少任意个字符都行+jhk结尾  查找“·············jhk”
		System.out.println(Pattern.matches(pattern, s));//
		System.out.println(Pattern.matches(pattern1, s));
		System.out.println(Pattern.matches(pattern2, s));
		System.out.println(Pattern.matches(pattern3, s));
		System.out.println(Pattern.matches(pattern4, s));
	}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternMethod2 {

	public static void main(String[] args) {

		//在字符串中通过指定要求来查找子字符串
		//在java中,\是转译字符,\\表示要插入一个正则表达式的\
		String content = "This pr2324oduct d 343564 is very good, QT3000! fsf 546 OK?";
		String pattern = "(\\D*)(\\d*)(.*)";
//查找不是数字的字符      查找是数字的字符             任意字符
//因为后面加了 * ,代表着任意数量的字符
		
		//创建patter对象
		Pattern pa = Pattern.compile(pattern);
		
		//匹配字符串
		Matcher ma = pa.matcher(content);
		
		//输出内容
		if(ma.find()) {//这里,matcher按照(\\D*)(\\d*)(.*)的顺序查找,并保留每次的查询进度
			System.out.println("找到字符串:" + ma.group(0));
//ma.group(0),表示3个查询条件的查询结果
			System.out.println("找到字符串:" + ma.group(1));
//按照第一个(\\D*)条件从第一位查询,结果为This pr2
			System.out.println("找到字符串:" + ma.group(2));
//按照(\\d*)条件从上次查询剩下的字符串开始查询,结果为2324
			System.out.println("找到字符串:" + ma.group(3));
//按照(。*)条件从上次查询剩下的字符串开始查询,oduct d 343564 is very good, QT3000! fsf //546 OK?
		} else {
			System.out.println("没有匹配成功!");
		}
//		String str = "fasfdhg2343fj hgtj32534 gr346! @6768";
//		String pattern = "(\\D*)(\\d*)(j\\b)(.*)";
//		//String pattern = "(\\d*)(.*@)(\\D*)(.*)";
//		//String pattern = "(\\d*)(\\D*)(.*@)(.*)";
//		Pattern pa = Pattern.compile(pattern);
//		Matcher ma = pa.matcher(str);
//		if(ma.find()) {
//			System.out.println(ma.group(0));//0是整个字符串,
//			System.out.println(ma.group(1));//1是按照第一个()里的内容查找
//			System.out.println(ma.group(2));//在查找中,程序已经按照pattern里的括号的顺序进行过查找
//			System.out.println(ma.group(3));//后者在前者找的基础上进行寻找,下标逐渐后移
//			System.out.println(ma.group(4));
//		}
	}
}

 

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternMethod3 {
	public static void main(String[] args) {
		//匹配指定字符
		String s = "hello everyone!";
		//定义匹配模式
		String regEx = "w|e";//查找是否存在其中一个
		Pattern pa = Pattern.compile(regEx);
		
		Matcher matcher = pa.matcher(s);
		boolean flag = matcher.find();
		System.out.println(flag);
		
		System.out.println("-------------------------");
		String s2 = "D:\\hello.txt";
		String regEx2 = ".+(.+)$";//任意字符多少个+(任意字符多少个)结尾
		Pattern pa2 = Pattern.compile(regEx2);
		Matcher ma = pa2.matcher(s2);
		boolean flag2 = ma.find();
		System.out.println(flag2);
		for (int i = 0; i < ma.groupCount(); i++) {
			System.out.println(ma.group(i));
		}
		
		//分割字符串
		String regEx3 = ":";
		Pattern pa3 = Pattern.compile(regEx3);
		String[]  strs = pa3.split("小明:小红:小李");
		System.out.println(Arrays.toString(strs));
		
		String s3 = "hello#world";
		String[]  strs2 = s3.split("#");
		System.out.println(Arrays.toString(strs2));
	}

}

 查询字符串中子字符串出现的次数

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternMethod4 {

	public static void main(String[] args) {
		//比如统计单词"dog"在字符串中出现的次数
		String content = "dog dog dog doggies dog";
		String reg = "\\bdog\\b";//\b:边界,意思是dog两边为边界
		
		Pattern pa = Pattern.compile(reg);
		Matcher ma = pa.matcher(content);
		int count = 0;
		while (ma.find()) {
			count++;
			System.out.println("匹配到的数量:" + count);
			System.out.println("开始匹配的位置:" + ma.start());//开始查找的地方
			System.out.println("结束位置:" + ma.end());//查找结束的地方
			//每次查找中,查找的位置都会向后相应移动
		}		
	}

}

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternMethod5 {

	public static void main(String[] args) {
//		String reg = "foo";//以foo开头
//		String s1 = "foooooooooooooooooooooo";
//		String s2 = "oofooo foo oooooooo ooooooo";
		String s1 = "This pr2324oduct d 343564 is very good, QT3000! fsf 546 OK?";
		String s2 = "This pr2324oduct d 343564 is very good, QT3000! fsf 546 OK?";
		String reg = "good";
		Pattern pattern = Pattern.compile(reg);
		Matcher ma1 = pattern.matcher(s1);
		Matcher ma2 = pattern.matcher(s2);
		
		System.out.println("正则:" + reg);
		System.out.println("s1:" + s1);
		System.out.println("s2:" + s2);
		
		//调用方法
		//System.out.println("lookingAt():" + ma1.lookingAt());
		//System.out.println("matches():" + ma2.matches());//字符串必须和正则表达式完全相同
	//	System.out.println("lookingAt():" + ma2.lookingAt());//从开头开始匹配(只匹配开头)
		if(ma1.find()){//必须在ma1.find()返回true,找到了对应字符串,才能使用ma1.group()输出找到的内容
			System.out.println("group11111():" + ma1.group());
		}
		if(ma2.find()){
			System.out.println("group2222():" + ma2.group());
		}
	}

}

 查找并输出字符串中特定的子字符串

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PatternMethod6 {

	public static void main(String[] args) {
		String s = "暗 示 法·c不bdf15284345626都mnhg是hj138457694354250m废,15267866576490j话";
	//	String reg = "[\u4e00-\u9fa5]";//是否是中文
		//String reg = "(152|138)(\\d*)";//以152或者138开头的,有任意位数字的一连串数字
		//String reg = "(152|138)(\\d){8}";
		String reg = "(152|138)\\d{8}";//以152或者138开头的,有8位数字的一连串数字
		Pattern p = Pattern.compile(reg);
		Matcher ma = p.matcher(s);
		
		int count = 0;
		while(ma.find()){
			count ++;
			System.out.println(ma.group());
			System.out.println(count);
		}
	}

}

匹配中文

 

[\u4E00-\u9fA5]

匹配html

<(\S*?)[^>]*>.*?</\1>|<.*?/>

匹配腾讯qq

[1-9][0-9]{4,}

匹配身份证

\d{15}|\d{18}

匹配ip地址

\d+\.\d+\.\d+\.\d+ [192.169.0.1]

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值