目录

  • 正则表达式的使用
  • Pattern类方法
  • Matcher类方法
  • PatternSyntaxException 类方法
  • 正则表达式语法



正则表达式的使用

正则表达式主要是用来匹配字符串的一个方式,用于搜索、编辑或处理文本。
正则表达式主要用的包为java.util.regex,这个包里有三个类:

Pattern类:这个类就是正则表达式的创建类,主要用于编译正则表达式,结果是返回一个Pattern对象;
Matcher类:这个类就是对字符串的操作,需要传入待匹配的字符串和上面的正则表达式对象(也就是Pattern类生成的对象);
PatternSyntaxException类:是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

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

public class zhengZe {
	public static void main(String[] args) {
	    String text = "我一路向北 离开有你的季节 你说你好累 已无法再爱上谁";
		String pattern = ".*一路向北.*";
		
		// 创建Pattern对象
		Pattern pat = Pattern.compile(pattern);
		System.out.println(pat.pattern());
		// 利用matches静态方法进行匹配
		boolean isMat = pat.matches(pattern, text);
		System.out.println(isMat);
		// 利用Matcher类进行匹配
		Matcher mat = pat.matcher(text);
		// mat.pattern方法返回对应的Pattern类对象
		System.out.println(mat.pattern());
		// 利用mat.find()方法进行匹配
		if(mat.find()){
		    // mat.start()方法返回最初匹配到的位置
		    System.out.println(mat.start());
		    // mat.end()方法返回最后匹配到的位置
		    System.out.println(mat.end());
		    // mat.group()方法返回匹配的字段
		    System.out.println(mat.group());
		}
	}
}

运行结果为:

.*一路向北.*		// pattern对象,也就是编译好的正则表达式
true			// 利用matches静态方法匹配到的结果,true or false
.*一路向北.*		// 利用Matcher方法返回的对应的Pattern对象,算是个检验方式吧
0				// 利用Matcher类的start方法返回的最初匹配位置
27				// 利用Matcher类的end方法返回的末尾匹配位置
我一路向北 离开有你的季节 你说你好累 已无法再爱上谁 	//返回匹配字符串

Pattern类方法

  • static Pattern compile(String regex):将指定的正则表达式编译并赋予给Pattern类,用法在上例。
  • Matcher matcher(CharSequence input):生成一个给定命名的Matcher对象,用法在上例。
  • static boolean matches(String regex, CharSequence input):编译给定的正则表达式并且对输入的字串以该正则表达式为模开展匹配,该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生成一个Matcher实例,用法在上例。
  • String pattern():返回该Patter对象所编译的正则表达式。
  • String[] split(CharSequence input):将目标字符串按照Pattern里所包含的正则表达式为模进行分割。
  • String[] split(CharSequence input, int limit):作用同上,增加参数limit目的在于要指定分割的段数,如将limi设为2,那么目标字符串将根据正则表达式分为割为两段。

Matcher类方法

  • public boolean find():尝试查找与该模式匹配的输入序列的下一个子序列。
  • public boolean find(int start):重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
  • public boolean matches():尝试将整个区域与模式匹配。
  • public int start():返回以前匹配的初始索引。
  • public int start(int group):返回在以前的匹配操作期间,由给定组所捕获的子序列的初始索引。
  • public int end():返回最后匹配字符之后的偏移量。
  • public int end(int group):返回在以前的匹配操作期间,由给定组所捕获子序列的最后字符之后的偏移量。
  • String group() :返回当前查找而获得的与组匹配的所有子串内容。
  • String group(int group):返回当前查找而获得的与指定的组匹配的子串内容。
  • int groupCount():返回当前查找所获得的匹配组的数量。
  • Matcher appendReplacement(StringBuffer sb, String replacement):将当前匹配子串替换为指定字符串,并且将替换后的子串以及其之前到上次匹配子串之后的字符串段添加到一个StringBuffer对象里。
  • StringBuffer appendTail(StringBuffer sb):将最后一次匹配工作后剩余的字符串添加到一个StringBuffer对象里。
  • boolean lookingAt():检测目标字符串是否以匹配的子串起始。
  • Pattern pattern():返回该Matcher对象的现有匹配模式,也就是对应的Pattern 对象。
  • String replaceAll(String replacement):将目标字符串里与既有模式相匹配的子串全部替换为指定的字符串。
  • String replaceFirst(String replacement):将目标字符串里第一个与既有模式相匹配的子串替换为指定的字符串。
  • Matcher reset():重设该Matcher对象。
  • Matcher reset(CharSequence input):重设该Matcher对象并且指定一个新的目标字符串。

PatternSyntaxException 类方法

  • public String getDescription():获取错误的描述。
  • public int getIndex():获取错误的索引。
  • public String getPattern():获取错误的正则表达式模式。
  • public String getMessage():返回多行字符串,包含语法错误及其索引的描述、错误的正则表达式模式和模式中错误索引的可视化指示。

正则表达式语法

表达式

功能

\

转义专用。如果想要用原本的 \ ,则需要用 \\ ;同理要用 \\ ,需要 \\\\ 。

.

匹配除换行符\n之外的任意单字符。

^

匹配输入字符串开头位置。

$

匹配输入字符串结尾位置。

*

匹配零个或者多个前面的字符,就像上面那个一路向北的案例,.* 表示只要是字符都算匹配上了。

+

最少需要一个字符或子表达式匹配,其他同 * 一样,如 Ja+ 既可匹配 Ja ,也可匹配上 Jay 。


零次或一次匹配前面的字符或子表达式,如 Ja(y)? 匹配 Ja 或 Jay。

\b

匹配一个字的边界,如 ay 匹配 Jay 中的 ay,而不是匹配 JayZhou 中间的ay。

\B

非字边界匹配,正好与 \b 相反。

\d

数字字符匹配。

\D

非数字字符匹配。

\f

换页符匹配,等效于 \x0c 和 \cL。

\n

换行符匹配,等效于 \x0a 和 \cJ。

\r

回车符匹配,等效于 \x0d 和 \cM。

\s

匹配任何空白字符,包括空格、制表符和换页符等。

\S

匹配任何非空白字符。

\t

制表符匹配,等效于 \x09 和 \cI。

\v

垂直制表符匹配,等效于\x0b 和 \cK。

\w

匹配任何字类字符,包括下划线。

\W

与任何非单词字符匹配。

{n}

正好匹配n次,n是非负整数,如 a{2} 匹配 Jaay 中的两个 a。

{n,}

至少匹配n次,n是非负整数。

{n, m}

n小于m,表示最少匹配n次,最多匹配m次。

(pattern)

匹配并捕获pattern的子表达式,如果要匹配 () ,请使用 ( 或者 )。

(?:pattern)

匹配但不捕获pattern的子表达式。

(?=pattern)

执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。

(?!pattern)

执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。

x|y

匹配 x 或 y。

[xyz]

匹配 x y z 中任一个字符。

[^xyz]

匹配未包含 x y z 中的任一个字符,与上相反。

[a-z]

匹配一个范围的字符集。

[^a-z]

与上相反。