- Java正则表达式的引入
Java对于字符串更加敏感,与字符串处理相关的用法也很多。下面我们对正则表达式对字符串的匹配、替换和拆分的功能和语句进行记录。
- 字符串集的匹配
如果让我们判断两个字符串是否完全相同,我们会想到用语句:
String str;
str.equals(“java”);来判断,
其实 str.matches(“java”);也可以达到同样的效果,此外,此语句搭配正则表达式,有更加强大的功能。不仅可以匹配一个固定的字符串,还可以匹配一个模式的字符串集,返回值为true或false。
比如:”java is great”.matches(“java.*”);true
”java is great”.matches(“java*”);false
仔细对比一下,是有区别的哦!
读到这不要疑惑,下面我们看看正则表达式的表示规则就明白啦:
- x :我们指定的字符,(要是一模一样肯定匹配呀)
- 万能点 . :可以代表任意一个字符(除换行符)(名字我自己起的,方便记忆)。 例如:java匹配j..a
- 小隔间 (ab|cd) :ab或者cd(字符串)。例如:"java is great".matches("(java|ww|ee)[\\s]is great");true
- 排排坐 [abc] :a或者b或者c中的一个。 例如:java匹配ja[uytv]
- 赶走排排坐 [^abc] :除了a、b、c以外的任意一个字符。
- 手牵手 [a-z] :从a到z的任意一个字符。
[0-9] :从0到9任意一位数字。
- 赶走手牵手 [^A-Z] :除了A到Z的任意一个字符。
- 多段并集 [a-e[m-p]] :a到e或者m到p。 例如:"java".matches("ja[a-c[e-g[h-v]]]a")true。
(可简写为:[a-em-p])。
- 多段交集 [a-e&&[c-p]] :a到e与c到p的交集。
(可简写为[a-e&&c-p])
注:(9)到(14)的中括号[]可以省略,java用\\来表示\,本文中我写双斜杠。
- [\\d] :一位数字,等同于[0-9]。
- [\\D] :一位非数字。
- [\\w] :一个单词字符(包括大小写)(如下划线_)
单词字符包括任何的字母、数字以及下划线。
- [\\W] :一个非单词字符(如$)。
- [\\s] :空白字符(空格‘ ’,换页‘\f’,换行’\n’,回车’\r’,水平制表符’\t’,垂直制表符’\v’)。
- [\\S] : 除了空白字符以外的任意一个字符。
量词符(确定量词前面的模式会重复多少次):
- _* :_大于等于0次出现,若_为字符串则用括号括起来。
- _+ :_大于等于1次出现,若_为字符串则用括号括起来。
- _? :_有0或者1次出现,若_为字符串则用括号括起来。
- _{n} :_正好出现n次,精确。
- _{n,} :_出现大于等于n次。
- _{n,m} :_出现次数大于等于n小于等于m。
- \\p{P}:表示一个标点字符('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~')
注:所有量词符都是贪婪的,会尽量取匹配最多次的子字符串,若想使其取匹配最少次的子字符串,则在量词符后打上’?’
以上就是正则表达式的表示规则,下面我们做一道题检验一下:我们平时使用的qq邮箱等账号用正则表达式怎么表示呢?
如:[\\d]+@[\\w]+.c(om|n)
- 字符串的替换
Java的String类包含replaceAll和replaceFirst方法用于字符串的替换,返回值为替换后的字符串。
其中replaceAll方法替换所有匹配的子字符串;
replaceFirst方法替换第一个匹配的子字符串。
str. replaceAll(第一个参数,第二个参数) 第一个参数是由正则表达式构成的字符串(集),第二个参数是用于替换的字符串,将字符串str中所有符合 正则表达式构成的字符串集 的子字符串 替换成第二个参数的字符串,replaceFirst方法将字符串str中第一个符合 正则表达式构成的字符串(集) 的子字符串 替换成第二个参数的字符串。
- 字符串的拆分
Java的String类包括的split方法用于字符串的拆分,返回值为字符串数组。
split(regex,limit);
其中regex为正则表达式构成的字符串;limit-1为拆分进行多少次,若limit<=0,则等同于split(regex),即进行最多次。