Java 中的正则表达式
2019-04-10
正则表达式
常规引用方式
表达式 | 解释 |
---|---|
. |
匹配所有字符 |
^regex |
必须从行首开始匹配 |
regex$ |
最后必须匹配行尾 |
[abc] |
字符组定义,必须匹配 a 或 b 或 c |
[abc][vz] |
字符组定义,必须匹配 第一位:a 或 b 或 c ,第二位 v 或 z |
[^abc] |
字符组中以 ^ 开始,表示排除模式 |
[a-d1-7] |
字符组范围 |
X竖线Z |
X 或 Z |
XZ |
X 紧邻 Z |
$ |
行尾 |
字符组 (character class/set)
正则表达式将中括号 []
视为**元字符 (metacharacter)**,元字符不参与匹配。
中括号内的字符,如 [0-9]
叫做字符组,表示一些被匹配的字符集。
字符组简写式
表达式 | 解释 |
---|---|
\d |
[0-9] |
\D |
[^0-9] |
\s |
[\t\n\x0b\r\f] |
\S |
非空白字符 |
\w |
[a-zA-Z_0-9] |
\W |
[^\w] |
\b |
匹配单词边界(vim中使用 \< \> ) |
量词
表达式 | 解释 |
---|---|
* |
{0,} |
+ |
{1,} |
? |
{0,1} . |
{X} |
X times |
{X,Y} |
Occurs between X and Y times, |
分组和后项引用
小括号可以分组、$1
之类的可以在捕获后在后面引用,如:
1 | // 移除两个单词之间的空格 |
反前瞻(《学习正则表达式》中的翻译,原文是:Negative look ahead):
1 | a(?!b) |
a 后面不跟着 b。
正则表达式中的模式:
(?i)
忽略大小写(?s)
单行模式(?m)
多行模式
转义字符
反斜杠是Java字符串中的转义字符。这意味着反斜杠在Java中具有预先定义的含义。必须使用双反斜杠 \ 定义一个反斜杠。如果要定义 \w,则必须在regex中使用 \w。如果要使用反斜杠作为文本,则必须在正则表达式中键入 \\ 作为转义符。
在String 方法中使用正则表达式
String
中提供了正则表达式的方法,如: matches()
, split())
, replaceFirst()
和 replaceAll()
方法.,replace()
方法不支持正则表达式。
方法 | 解释 |
---|---|
s.matches("regex") |
s 是否完全匹配 regex |
s.split("regex") |
使用 regex 分割 s ,返回一个数组 |
s.replaceFirst("regex"), "replacement" |
使用 "replacement 替换掉第一个 "regex" |
s.replaceAll("regex"), "replacement" |
使用 "replacement 替换掉所有 "regex" |
Pattern and Matcher
对于高级正则表达式,可以使用 java.util.regex.Pattern 和 java.util.regex.Matcher 类。
首先创建一个 Pattern 对象,该对象定义正则表达式。此模式对象允许您为给定的字符串创建 Matcher 对象。然后使用这个对象对字符串执行 regex 操作,例如:
1 | import java.util.regex.Matcher; |