Java-正则表达式
1 作用
正则表达式定义了字符串的模式
正则表达式可以用来搜索、编辑或处理文本
2 语法
元字符 | 描述 |
---|---|
\ | 将下一个字符标记符、或一个向后引用、或一个八进制转义符。 |
^ | 匹配输入字符串的开始位置 |
$ | 匹配输入字符串的结束位置 |
* | 匹配前面的子表达式任意次 |
+ | 匹配前面的子表达式一次或多次(大于等于1次) |
? | 匹配前面的子表达式零次或一次 |
{n} | n是一个非负整数。匹配确定的n次 |
{n,} | n是一个非负整数。至少匹配n次 |
{n,m} | m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次 |
.点 | 匹配除“\r\n”之外的任何单个字符 |
x|y | 匹配x或y |
[xyz] | 字符集合。匹配所包含的任意一个字符 |
[^xyz] | 负值字符集合。匹配未包含的任意字符 |
[a-z] | 字符范围。匹配指定范围内的任意字符 |
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符 |
\b | 匹配一个单词边界,也就是指单词和空格间的位置 |
\B | 匹配非单词边界 |
\d | 匹配一个数字字符。等价于[0-9]。 |
\D | 匹配一个非数字字符。等价于[^0-9]。 |
\f | 匹配一个换页符 |
\n | 匹配一个换行符 |
\r | 匹配一个回车符 |
\s | 匹配任何不可见字符,包括空格、制表符、换页符等等 |
\S | 匹配任何可见字符 |
\t | 匹配一个制表符 |
\w | 匹配包括下划线的任何单词字符 |
\W | 匹配任何非单词字符 |
\xn | 匹配n,其中n为十六进制转义值 |
\num | 匹配num,其中num是一个正整数 |
\un | 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符 |
< > | 匹配词(word)的开始(<)和结束(>) |
| | 将两个匹配条件进行逻辑“或”(Or)运算 |
+ | 匹配1或多个正好在它之前的那个字符 |
? | 匹配0或1个正好在它之前的那个字符 |
注意:
Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。
(),[],{}的区别
**小括号():**匹配小括号内的字符串,可以是一个,也可以是多个,常跟“|”(或)符号搭配使用,是多选结构的
示例1:string name = “way2014”; regex:(way|zgw) result:结果是可以匹配出way的,因为是多选结构,小括号是匹配字符串的
示例2:string text = “123456789”; regex:(0-9) result:结果是什么都匹配不到的,它只匹配字符串"0-9"而不是匹配数字, [0-9]这个字符组才是匹配0-9的数字
中括号[]:匹配字符组内的字符,比如咱们常用的[0-9a-zA-Z.*?!]等,在[]内的字符都是字符,不是元字符,比如“0-9”、“a-z”这中间的“-”就是连接符号,表示范围的元字符,如果写成[-!?(]这样的话,就是普通字符
示例1: string text = “1234567890”; regex:[0-9] result:结果是可以匹配出字符串text内的任意数字了,像上边的[或符号“|”在字符组内就是一个普通字符
示例2:string text = “a|e|s|v”; regex:[a|e|s] result:结果就是匹配字符a、e、s三个字符,这个跟(a|e|s)有区别的,区别就是(a|e|s)匹配的是a、e、s三个字符的随意一个,三个 中的任意一个,这里|是元字符
**大括号{}:**匹配次数,匹配在它之前表达式匹配出来的元素出现的次数,{n}出现n次、{n,}匹配最少出现n次、{n,m}匹配最少出现n次,最多出现m次
3 Pattern类
用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建
可以通过Pattern.complie(String regex)创建一个正则表达式
只能做一些简单的匹配操作
方法 | 作用 |
---|---|
Pattern.matches(regex,input) | 全匹配字符 |
4 Matcher类
构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例 Matcher m = p.matcher(“aaaaab”);
支持便捷强大的正则匹配操作,包括分组、多次匹配支持
方法 | 作用 |
---|---|
matches() | 全匹配字符 |
lookingAt() | 从头开始匹配字符 |
find() | 匹配是否包含字符 |
start() | 返回匹配的值的开始位置 |
end() | 返回匹配的值的结束位置 |
group() | 返回匹配的值 |