概念
正则表达式 ( r e g e x ) (regex) (regex):用来快速匹配或检查合法字符串的模板
常用正则表达式符号
-
英文句点
.
表示匹配任意单个字符eg. a.c的合法匹配abc
-
[]
匹配方括号内单个指定字符eg. a[bc]d的合法匹配abd, acd
-
|
相当于或,匹配指定其中一项 ( 不 一 定 是 单 个 字 符 ) (不一定是单个字符) (不一定是单个字符)eg. a(b|c|dd)e 的合法匹配 abe, ace, adde
-
*
表示匹配0次或多次 -
+
表示匹配1次或多次 -
?
表示匹配0次或1次 -
{n}
表示匹配恰好n次 -
{n,m}
表示匹配n到m次 **注意不能使用空白字符,如写成{n, m}
** -
-
表示范围,所以在字符串中要加转义字符\
-
^
表示非,用于方括号内表示不匹配的字符eg. [^x]代表第一个字符不为x
-
\d
表示[0-9]
-
\D
表示[^0-9]
-
\w
表示[0-9A-Za-z]
-
\W
表示^[0-9A-Za-z]
-
\s
表示[\t\n\r\f]
-
\S
表示[^\t\n\r\f]
eg. [\\d]{3}-[\\d]{2}-[\\d]{4}
表示字符串xxx-xx-xxxx
其中x为数字
**java中 \\d
第一个 ‘\’ 表示转义,第二个 ‘\’ 表示反斜杠本身,所以上述正则表达式需要用\\d
表示,而表示一个字符意义的’\’ 需要用四个’\\\\’ 表示,区别与cpp的语法 **
注意空白符不能随意放到正则表达式中
**.*
表示任何字符串 **
替换和拆分字符串
String 类提供了多种方法
String s = "java java java";
//matches方法返回类型boolean判断字符串是否匹配正则表达式
//replaceAll方法替换所有匹配的子字符串
System.out.println(s.repalceAll("v\\w","wi"));
//输出"jawi jawi jawi"
//replaceFirst方法替换第一个匹配的字符串
System.out.println(s.repalceAll("v\\w","wi"));
//输出"jawi java java"
//split方法分割字符串为子字符串,重载了两种方法
//split(regex)方法
String[] tokens = "Java1HTML2Perl".split("\\d");
//拆分为"Java"、"HTML"、"Perl"并保存再tokens[0]、tokens[1]、tokens[2]中
//split(regex,limit)方法,限定了模式匹配次数,如果limit<=0,等价于split(regex),否则模式最多匹配limit-1次;
量词符的贪婪性
这一位置它们会尽可能匹配最多次
System.out.println("Jaaavaa".replaceFirst("a+","R"));//输出JRvaa
如果要变为"惰性",意味着匹配尽可能少的次数
System.out.println("Jaaavaa".replaceFirst("a+?","R"));//输出JRaavaa
-END-