正则表达式(regular expression)
正则表达式(regular expression,简写为regex)是一个字符串,用来描述匹配-一个字符串集合的模式。对于字符串处理来说,正则表达式是一个强大的工具。可以使用正则表达式来匹配、替换和拆分字符串。Java的正则表达式是由java.util.regex的Pattern和Matcher类实现的。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
匹配字符串
用法:string.matches(pattern)返回boolean类型。
String类中的matches方法类似equals方法。例如,以下两个语句结果都为true。
"Java" .matches("Java");
"Java" . equals("Java");
正则表达式语法
正则表达式由字面值字符和特殊符号组成。表H-1列出了正则表达式常用的语法。
注意:
◇在其他语言中,\\ 表示:我想要在正则表达式中插入一个普通的(字面上的)反斜杠,请不要给它任何特殊的意义。
在 Java 中,\\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。需要使用\\来表示\。
◇空白字符是' '、'\t'、'\n'、'\r',或者'\f'。因此, \s和[\t\n\r\f]等同,\S和[^ \t\n\r\f]等同。
◇单词字符是任何的字母、数字或者下划线字符。因此\w等同于 [a-z[A-Z][0-9]_]或者简化为 [A-Za-z0-9_]。\W等同于[^A-Za-z0-9]。
◇表H-1中后面六个条目*、+、?、{n}、{n, }以及{n,m}称为量词符 (quantifier),用于确定量词符前面的模式会重复多少次。例如,A*匹配0或者多个A,A+匹配1或者多个A,A?匹配0或者1个A。A{3} 精确匹配 AAA,A{3, },匹配至少3个A, A{3,6}匹配3到6之间个A。*等同于 {0, },+等同于{1, },?等同于{0,1}。
◇不要在重复量词符中使用空白。例如,A{3,6}不能写成逗号后面有一个空白符的A{3, 6}。
◇可以使用括号来将模式进行分组。例如,(ab){3}匹配ababab,但是ab{3}匹配abbb。
替换和拆分字符串
如果字符串匹配正则表达式,String类的matches方法返回true。string类也包含replaceAll,replaceFirst和split方法,用于替换和拆分字符串。
replaceAll方法替换所有匹配的子字符串,replaceFirst方法替换第一个匹配的子字符串。
System . out . println("Java Java Java" . rep1aceA11("v\\w", "wi"));
>>>Jawi Jawi Jawi
System . out . print1n("Java Java Java" . replaceFirst("v\\w", "wi"));
>>>Jawi Java Java
将字符串"Java1HTML2Per1"拆分为Java、HTML 以及Per1并且保存在tokens[0], tokens[1]以及tokens[2]
String[] tokens = "JavalHTML2Per1" . split("\\d");
其他应用
1、合法E-mail地址:必须包含一个并且只有一个符号“@”,不允许出现“@.”或者.@,允许“@”前的字符中出现“+”,不允许“+”在最前面,或者“+@”
正则表达式:^(\w+((-\w+)|(.\w+)))+\w+((-\w+)|(.\w+))@[A-Za-z0-9]+((.|-)[A-Za-z0-9]+)*.[A-Za-z0-9]+$
2、社会安全号的模式是 xxx-xx-xxxx,其中x是一位数字,正则表达式: [\\d]{3}-[\\d]{2}-[\\d]{4}
3、偶数:[\\d]*[02468]
4、电话号码(xxx)xxx-xxxx 第一位数字不能为0 :\\([1-9][\\d]{2}\\)[\\d]{3}-[\\d]{4}
5、假定姓由最多25个字母组成,并且第一个字母为大写形式,正则表达式(姓的模式): [A-Z][a-zA-Z]{1,24}
6、标识符:以字母、下划线或美元符号开始,不以数字开头,由字母、数字、下划线和美元符号组成。正则表达式:[a-zA-Z_$][\\w$]*