概述
1.正则表达式用于解决字符串出了问题,包括匹配、选择、编辑和验证。
表达式语法
字符
表达式 | 描述 | 示例 |
---|---|---|
c | 字符 | |
. | 任何除行终止符的字符,通过设置标志可以匹配包括行终止符的字符 | |
\x{p} | 十六进制码为p的Unicode码点 | \x{1D546} |
\xhh,\uhhhh | 十六进制码元 | \uFEFE |
\a,\e,\f,\n,\r,\t | 响铃,转义,换页,换行,回车,制表符 | \n |
\Q…\E | 在做引号和右引号之间的所有字符 | \Q(…)\E匹配字符串(…) |
字符类 | ||
表达式 | 描述 | 示例 |
– | – | – |
[adc] | 任何由abc表示的字符 | [0-9±] |
[^adc] | 任何除abc表示的字符 | [^\d\s] |
[a-z&&[hij]] | 任何与h或i或j相交的字符 | [\p{L}&&[ ^a-zA-Z] |
\d | 数字[0-9] | \d+是一个数字序列 |
\D | 非数字[ ^\d] | |
\w | 单词字符[a-zA-Z0-9] | |
\W | 非单词字符[ ^\w] | |
\s | 空白符,包括空格、回车、换页、换行、tab | |
\S | 非空白符 | |
逻辑操作符 | ||
表达式 | 描述 | 示例 |
– | – | – |
XY | 任何X中的字符串后面跟着Y中的字符串 | [1-9][0-9]*表示没有前导0的整数 |
X | Y | 任何X或Y中的字符串 |
群组:使用括号划分的正则表达式,可以根据组的编号来引用某个组。组号为0表示整个表达式,组号为1表示被第一个括号括起的组。 | ||
A(B(E))D:有三个组,组0为ABED,组1为BE,组2为E | ||
表达式 | 描述 | 示例 |
– | – | – |
(X) | 捕获X的匹配 | ‘([ ^’]*)'捕获的是被引用的文本 |
\数字 | 第n(n为斜杠后的数字)组 | ([’ “]).*\1 匹配第一组’adc’和"abc”,但不能匹配’abc" |
(?X) | 捕获与给定名字匹配的X | '(?[A-Za-x0-9]+)'可以捕获名字为id的匹配 |
\k | 具有给定名字的组 | \k可以匹配名字为id的组 |
(?:X) | 使用括号但是不捕获X | 在(?:http|ftp)://(.*)中,在://之后的匹配是\l |
量词 | ||
表达式 | 描述 | 示例 |
– | – | – |
X? | 可选X | +?可选的+号 |
X*,X+ | 0个或多个,一个或多个 | [1-9][0-9]+大于10的整数 |
X{n},X{n,},X{m,n} | n个,至少n个,m到n个 | [0-7]{1,3}一位到三位八进制数 |
Q?,其中Q是一个量词表达式 | 勉强量词,在尝试最长匹配之前先尝试最短匹配 | .*(<.+?>).*捕获尖括号括起来的最短序列 |
Q+,其中Q是一个量词表达式 | 占有量词,在不回溯的情况下获取最长匹配 | ‘[ ^’]*+'匹配单引号引起来的字符串,并且在字符串中没有右单引号的情况下立即匹配失败 |
正则表达式使用
- 简单使用:使用String的内建功能,使用方式如下:
“待匹配的字符串”.matchers(“正则表达式”)。 - 复杂使用:
使用Pattern类的静态方法compile()来编译你的正则表达式,它会根据String类型的正则表达生成一个Pattern对象,将需要检索的字符串传入该pattern对象的matcher()方法,生成一个Matcher对象,该对象有很多功能可供使用,最简单的matchers()检测刚才传入的字符串是否满足正则表达式,还有find()以及与群组相关的方法。
参考说明 https://www.runoob.com/java/java-regular-expressions.html
https://www.runoob.com/java/java-regular-expressions.html