正则表达式的概述
正则表达式,简单来说就是正确规则的表达式,而这个规则是由java给我们定的。
具体解释就是 正则表达式是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串(一种规则),有着自己特殊的应用。
在我们需要对qq号码、电子邮箱、车牌号、身份证号码等进行验证时,可使用if else这种非正则表达式实现,但是这样子会比较繁琐。
用正则表达式实现的话可以几行语句就搞定。
正则表达式的组成规则
规则字符在java.util.regex Pattern类中。
常用的规则字符如下:
字符:
字符 | 含义 |
---|---|
x | 字符 x (‘a’ 表示字符a) |
\ | 反斜线字符 |
\n | 换行符 |
\r | 回车符 |
字符类:
字符 | 含义 |
---|---|
[abc] | a、b或c |
[^abc] | 除了a、b或c之外的任何字符 |
[a-zA-Z] | a到z或A到Z,两端的字母包含在范围内 |
[0-9] | 0到9的字符都包括 |
预定义字符类:
字符 | 含义 |
---|---|
. | 代表任何字符,使用是需要转义即 . |
\d | 代表数字 0-9 |
\w | 代表单词字符 [a-zA-Z_0-9] |
边界适配器:
字符 | 含义 |
---|---|
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界,即不是单词的地方 |
Greedy 数量词:
字符 | 含义 |
---|---|
X? X | 一次或者一次也没有 |
X* X | 零次或者多次 |
X+ X | 一次或者多次 |
X{n} X | 恰好n次 |
X{n,} X | 至少n次 |
X{n,m} X | 至少n次,但是不超过m次 |
正则表达式的使用
正则表达式可以用于判断、分割、替换字符串等方面。
正则表达式的判断功能
可以判断输入的字符串是否符合某种规则。可以使用matches()方法。
正则表达式的分割功能
可以依据正则表达式来进行字符串的分割。可以使用split()方法。
正则表达式的替换功能
可以使用正则表达式来替换字符串中的某个子字符串。可以使用replaceAll()方法
正则表达式的获取需要的类
获取正则表达式的时候,我们需要用到的类由Pattern类和Matcher类。
Pattern类:
正则表达式的编译表示形式。
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
Matcher类:
通过解释 Pattern 对 character sequence 执行匹配操作的引擎。
通过调用模式器的 matcher 方法从模式创建匹配器。创建匹配器后,可以使用它执行三种不同的匹配操作:
- matches 方法尝试将整个输入序列与该模式匹配。
- lookingAt 尝试将输入序列从头开始与该模式匹配。
- find 方法扫描输入序列以查找与该模式匹配的下一个子序列。
模式和匹配器的典型调用顺序:
Pattern p = Pattern.compile(“a*b”);
Matcher m = p.matcher(“aaaaab”);
boolean b = m.matches();
为什么要有模式器和匹配器呢?我们使用String类中的matches()方法不是就可以了吗?
我们使用String类中的matches()方法仅仅只能判断字符串是否符合正则表达式,但是却不能对其进行其他的操作。若要进行其他的操作,就需要用到模式器和匹配器啦。
正则表达式的获取功能:
Pattern和Matcher需要结合使用。使用 find()方法 和 group()方法,一定要先使用find()方法先找到 才能用group()方法获取出来。