含义
正则表达式是一个字符串,用来描述匹配一个字符串集合的模式。
作用
主要用于匹配、替换和分割字符串。实际应用如判读输入是否合法等等。
匹配字符串的方法
使用String 类中的matches方法
区别: equals方法,只能匹配固定字符串,字符串相同返回true,不同返回false; matches方法,不仅可以匹配固定字符串,还可以匹配一个模式的字符串
例子:
“java”.equals(“java”) 返回true
“java is good”.equals(“java”) 返回false
“java”.matches(“java”) 返回true
“java is good”.matches(“java.*”) 返回true
最后一个例子中的“.”和“*”就是正则表达式
“.”匹配任意的单个字符,“p*”表示模式p出现0次或者多次
所以“java.*”表示“java”后面可以匹配任意长度,任意类型的字符
下方为常见的正则表达式表:
****注意:****
1.不要在正则表达式中写入空格,如 p{3,6}不能写成p{3, 6}
2.注意有无括号匹配的不同,如(ab){3}匹配的是ababab,但是ab{3}匹配的是abbb
3.正则表达式中的转义字符、和特殊字符包括括符(和),要用\表示,例如, [\d]{3}表示匹配三位数字,而不是写成[d]{3}
4.特殊用法 [\d]*[02468] 匹配偶数
**解释:**“[\d]\*”表示匹配前面任意长度的数字字符串,“[02468]”表示最后(最低)一位数必须是0,2,4,6,8五个数字中的一个,所以匹配的结果是任意大小的(非负)偶数
替换和分割字符串
Java的 String 类中相关方法
bool matches(String replaceStr) 如果字符串匹配则返回true,否则返回false
String replaceAll(String replaceStr,String newStr) 将所有匹配的字符串替换成新字符串
eg:
“ Java Java Jav@”.replaceAll(“v\\w”,”wi”)
结果为 Jawi Jawi Jav@
解释:“v\\w”表示匹配v再加上任意一个单词字符(见表格中说明)的串,由于两个“java”中的“va”与之匹配,所以替换成“wi”;由于“jav@”中的“@”不是单词字符,所以不改变
String replaceFirst(String replaceStr,String newStr) 将第一个匹配的字符串替换成新字符串
eg:
“ Java Java Jav@”.replaceFirst(“v\\w”,”wi”)
结果为 Jawi Java Jav@
解释:与前者类似,区别在于后者只替换了一个“java”
String[] split(String replaceStr) 返回一个字符串数组,包含被匹配模式的分隔符分割的字符串
eg: String[] tokens=”javaee1javase2js”.split(“\\d”)
tokens[0] 中保存了 javaee
takens[1] 中保存了 javase
takens[2] 中保存了 js
解释: “\\d”匹配任意一个数字字符,所以源字符串中的1和2被匹配到了,然后根据匹配的字符串进行分割
String[] split(String replaceStr,int limit) limit参数表示模式应用的次数;当limit<= 0 ,则与不带limit参数的用法相同,如果limit>0,模式最多匹配 limit-1 次
eg:
String[] tokens=”javaee1javase2js”.split(“\\d”,0)
tokens[0] 中保存了 javaee
takens[1] 中保存了 javase
takens[2] 中保存了 js
解释:参数limit=0,与不带参数的相同
String[] tokens=”javaee1javase2js”.split(“\\d”,1)
tokens[0] 中保存了 javaee1javase2js
解释:参数limit=1,最多匹配limit-1=0次,所以不匹配,得到源字符串
String[] tokens=”javaee1javase2js”.split(“\\d”,0)
tokens[0] 中保存了 javaee
takens[1] 中保存了 javase2js
解释:参数limit=2,最多匹配limit-1=1次,所以匹配1次,分割一次
String[] tokens=”javaee1javase2js”.split(“\\d”,0)
tokens[0] 中保存了 javaee
takens[1] 中保存了 javase
takens[2] 中保存了 js
解释:参数limit=3,最多匹配limit-1=2次,所以匹配2次,分割两次