正则
概述
当我们处理一个字符串问题的时候可以尝试一下使用正则,这样代码的可读性将会大大的提高,不过这么做的话,之前的一个问题就变成了两个问题(😄)。
详解
字符串匹配
简单字符串匹配
模式是正则表达式最基本的元素,他是一组描述字符串特征的字符。
最简单的模式就是一个字符串,不包含任何特殊的字符串,比如:hello,这中模式可以匹配任意包含了hello的字符串,如:aaa hello world !。
^表示以什么开头的字符串,比如^hello表示以hello开头的字符串,这种模式可以匹配任何以hello开头的字符串,如:hello word。
$表示以什么结尾的字符串,比如hello$表示以hello结尾的字符串,这种模式可以匹配任何以hello结尾的字符串,如:world hello。
转义字符匹配
在上面的模式匹配中,字符都是代表其本身(这里想表达的是有些字符并不是代表其自身,也即是转义字符,如^\t并不是标记以\t开头的字符串,而是
以制表符tab开头的字符串),\r代表回车、\n代表新行、\s代表空格。
字符簇匹配
字符簇匹配的意思是匹配一个指定的字符范围,不过这里仅仅是匹配单个字符,具体规则如下
1 | [a-z] //匹配所有的小写字母 |
可以举个例子:^[0-9][a-z]$表示匹配一个长度为2的字符串,并且字符串的首字符是一个数字,尾字符是一个小写的字母。
值得一提的是,如果在方括号中使用^表示取反的意思。如^[^a-z][0-9]$表示长度为2的字符串,不过首字符只要不是小写字母就可以
重复字符
对于重复出现的字符,上面的规则显然就不适用了,通常情况下使用{}来表示匹配多个字符,例如我们可以用^[a-z]{1,}来匹配所有的长度大于1的
并且是小写字符的字符串。我们也可以指定{}中数字的范围来指定前面的模式出现的次数。这里我们也可以简化一下,用?来表示可选({0,}),用
+表示至少一个({1,})。
逻辑运算
可以用|代表或的逻辑,其他的待整理。
示例
最后还是来一个示例:
1 | 给定一个单词,你需要判断单词的大写使用是否正确。 |
1 | import java.util.regex.Pattern; |
小结
关于正则的分析就到现在为止吧,有时间再继续整理。