JAVA总结---正则表达式

正则表达式用于:

匹配字符串,切割字符串,替换替换。
正则表达式相对于普通的字符串,更加智能化。

常用正则表达式:

正则表达式:由普通字符(例如字符 a 到 z)以及特殊字符(称为"元字符")组成的文字模式
JAVA正则表达式(要放进compile的字符串)中, \\表示转转义的\,  而不仅仅只是\。 对于普通的\ , 表示为\\\\。
但是在JAVA字符串输出时,\\表示一个\, \\\\表示\\。如后面例题。

  • ?     0次或一次
  • +     一次或多次
  • *      任意次
  • .       一个字符
  • ^      开头符
  • $      结束符
  • {n}   恰好出现n次
  • {n,}   出现至少n次
  • {n,m} 出现n到m次
  • [a-z]  出现a到z中的一个
  • [^0-9]  非数字( 在[] 内^ 代表非 )
  • \d      数字(等价于[0-9])
  • \D     非数字
  • \w     字母
  • \W    非字母
  • \s      空格
  • \S     非空格
  • \b     词界(就是单词的边界)
  • \B     非词界

JAVA中java.util.regx中的类

  1. Pattern:pattern 对象是一个正则表达式的编译表示,利用它的静态方法compile()获得对象。
  2. Matcher:Matcher 对象是对输入字符串进行解释和匹配操作的引擎, 利用Pattern的方法matcher(String)获得对象
  3. PatternSyntaxException:表示一个正则表达式模式中的语法错误
    public class Demo {
    	public static void main(String[] args) {
    		Pattern p = Pattern.compile("a*b");   //利用Pattern静态方法获得对象
    		Matcher m = p.matcher("aaaaab");      //利用Pattern对象的matcher方法获得对象
    		System.out.println("是否一样" + m.matches());  //进行匹配
    	}
    
    }

    运行结果:是否一样true
    在这里首先编译正则表达式获得Pattern对象,然后Pattern(模式)对象获得对输入字符串操作的引擎。

捕获组

捕获组就是把正则表达式中子表达式匹配的内容,保存到内存中以数字编号或显式命名的组里,方便后面引用,即为了Matcher引擎更加方便地操作它们。如(a)(b)就是两组, 而对应引用时group(1), group(2)分别代表a, b;, 注意group(0)代表ab。
捕获组是通过从左至右计算其开括号来编号,在表达式((A)(B(C))),有四个组。

  • ABC  -- > ((A) (B(C)))
  • A      ----> (A)
  • BC   ----->(B(C))
  • C      ------> (C)
    public class Demo {
    	public static void main(String[] args) {
    		String regxString = "AAAABBCCCD";
    		String regx = "(A+)(B+)(C+)(D?)";
    		Pattern p = Pattern.compile(regx);
    		Matcher m = p.matcher(regxString);
    		if(m.find()) {
    			System.out.println("捕获组所有 :    " + m.group(0));
    			System.out.println("捕获组1  :   " + m.group(1));
    			System.out.println("捕获组2  :  " + m.group(2));
    			System.out.println("捕获组3  :  " + m.group(3));
    			System.out.println("捕获组4  : " + m.group(4));
    		}
    	}
    
    }

    打印结果为:
    捕获组所有 :    AAAABBCCCD
    捕获组1  :   AAAA
    捕获组2  :  BB
    捕获组3  :  CCC
    捕获组4  : D

正则表达式用途一:匹配字符

利用Matcher的matches函数进行匹配,利用Patter其中的方法获得操纵引擎

public class Demo {
	public static void main(String[] args) {
		String regxString = "aaaaa\\b";
		String regx = "\\w+\\\\b";
		Pattern p = Pattern.compile(regx);
		Matcher m = p.matcher(regxString);
		System.out.println(m.matches());
		System.out.println("\\w");
//		System.out.println("\\\"); //报错:字符串文字未用双引号正确地引起来
		System.out.println("\\\\");
	}

}

输出结果为:
true
\w
\\

因为在非正则表达式中,\\就可以代表\,而对应正则表达式(即要编译的字符串)来说,\\代表转义,\\\\代表普通\。
利用产生的操纵引擎matcher来调用matches()进行匹配。

正则表达式用途二:切割字符串

利用String的split(regx),在JAVA中许多代码中都要传入的是正则表达式而不是字符串

public class StringSplitDemo {
	public static void main(String[] args) {
		String name = "A\\B\\C\\DD";
//		String reg = "\\";   //在解除注释后,并注释下一行时,发生运行时报错
		String reg = "\\\\";
		String[] names = name.split(reg);
		for(String str: names)
			System.out.println(str);
	}

}

运行结果为:
A
B
C
DD

由于在split()源代码中出现 return Pattern.compile(regex).split(this, limit);所以这个传入的字符串依然为正则表达式,需要用\\\\来表示普通的\。

正则表达式用途三:替换字符串

Matcher 类也提供了replaceAll 和 replaceFirst 方法用于字符串的替换

public class regxReplaceDemo {
	public static void main(String[] args) {
		String str = "ABBCCCBB";  //要处理的字符串
		String reg = "BB";        //正则表达式
		String replaceString = "MM";  //替换字符串
		Pattern p = Pattern.compile(reg);
		Matcher m = p.matcher(str);
		System.out.println(m.replaceFirst(replaceString));
		System.out.println(m.replaceAll(replaceString));
	}

}

运行结果:
AMMCCCBB
AMMCCCMM

replaceAll替换所有被匹配的,而replace替换第一次匹配的。
 

总结:要学会Matcher中的类使用方法,以及多运用正则表达式,关键在于利用模式Patter来创建操作字符串的引擎matcher。
 

你可能感兴趣的:(JAVA总结---正则表达式)