java正则表达式

一、概念

正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索替换那些符合某个模式(规则)的文本。

二、举例

正则表达式为一个字符串,其中[]内的部分代表其中的任意字符。例如[abc]代表a或b或c。我们还可以用[a-z]这种形式代表某一字符区间。
有了正则表达式,我们能很简洁的去匹配、替换、切割字符串。

(1)查找

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

public class Main {
     

	public static void main(String[] args) {
     
		//要匹配的字符

		String str = "131bcd6fgij";

		//正则表达式
		//这里代表第一个字符为1,第二个字符为2,3,7,8,后面9个为小写字母或数字,且不为5或者h

		String regex = "1[2378][1-46-9a-gi-z]{9}";
		
		//直接写
		
		boolean flag1 = str.matches("1[2378][1-46-9a-gi-z]{9}");
		
		System.out.println(flag1);
		
		//或者
		
		boolean flag2 = Pattern.matches(regex, str);
		
		System.out.println(flag2);

		//再或者将给定的正则表达式编译为模式。
		
		Pattern p = Pattern.compile(regex);

		//创建一个匹配器,匹配给定的输入与此模式。

		Matcher m = p.matcher(str);

		//尝试将整个区域与模式进行匹配。

		boolean flag3 = m.matches();

		//输出匹配结果,此次结果为true

		System.out.println(flag3);

	}

}

(2)替换

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

public class Main {
     

	public static void main(String[] args) {
     
		//要匹配的字符

		String str = "12a6B985Ccv65";

		//正则表达式

		String regex = "[a-zA-Z]+";

		//正则表达式

		String regex2 = "\\d+";
		
		//将字符串中英文字母替换为&符号,输出12&6&985&&&65

		System.out.println(str.replaceAll("[a-zA-Z]", "&"));

		//将字符串中连续英文字母替换为&符号,输出12&6&985&65

		System.out.println(str.replaceAll(regex, "&"));
		
		//将字符串中单个数字替换为0,输出00a0B000Ccv00

		System.out.println(str.replaceAll("\\d","0"));

		//将字符串中单个数字或者连续的数字替换为0,输出0a0B0Ccv0

		System.out.println(str.replaceAll(regex2,"0"));
		
	}

}

(3)切割

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

public class Main {
     

	public static void main(String[] args) {
     
		// 要切割的字符

		String str = "2a6B5C65q9";

		// 根据单个数字或者连续数字切割字符串
		
		String []arr = str.split("\\d+");
		

		System.out.println(arr.length);
		
		for (String s : arr) {
     
			System.out.println(s);
		}
		
		// 根据单个数字来切割字符串
		
		arr = str.split("\\d");
		
		System.out.println(arr.length);
		
		for (String s : arr) {
     
			System.out.println(s);
		}
	}

}

开头存在数字,导致最终分割结果在开头会多空的字符串。
在这里插入图片描述

三、正则表达式的部分规则

任意一个字符表示匹配任意对应的字符,如a匹配a,7匹配7,-匹配-。
[] 代表匹配中括号中其中任一个字符,如[abc]匹配a或b或c。
- 在中括号里面和外面代表含义不同,如在外时,就匹配-,如果在中括号内[a-b]表示匹配26个小写字母中的任一个;[a-zA-Z]匹配大小写共52个字母中任一个;[0-9]匹配十个数字中任一个。
^ 在中括号里面和外面含义不同,如在外时,就表示开头,如^7[0-9]表示匹配开头是7的,且第二位是任一数字的字符串;如果在中括号里面,表示除了这个字符之外的任意字符(包括数字,特殊字符),如[^abc]表示匹配出去abc之外的其他任一字符。
. 表示匹配任意的字符。
\d 表示数字。
\D 表示非数字。
\s 表示由空字符组成,[ \t\n\r\x\f]。
\S 表示由非空字符组成,[^\s]。
\w 表示字母、数字、下划线,[a-zA-Z0-9_]。
\W 表示不是由字母、数字、下划线组成。
?: 表示出现0次或1次。
+ 表示出现1次或多次。
* 表示出现0次、1次或多次。
{n} 表示出现n次。
{n,m} 表示出现n~m次。
{n,} 表示出现n次或n次以上。
XY 表示X后面跟着Y,这里X和Y分别是正则表达式的一部分。
X|Y 表示X或Y,比如"food
(X) 子表达式,将X看做是一个整体。

参考博客:https://www.jianshu.com/p/3c076c6b2dc8

你可能感兴趣的:(Java,作业)