Java中的正则表达式
正则表达式中的转义符
在正则表达式中有两种情况需要用到转义符:
(1)要匹配的字符在正则表达式中有特殊含义,但我想让它仅仅代表一个字符而不具备任何其它特殊含义。例如'\\*'。
(2)使用正则表达式中的转义字符。例如'\\d'。
我们知道在Java的普通字符串中,单反斜杠\代表了字符的转义(无论\+后面的字符是否真的能转义成一个字符)。也就是说在Java字符串中,不想使用转义字符而又想用\时需要用到双反斜杠\\。如果要在正则表达式中使用转义字符时,需要使用双反斜杠\\而不是单反斜杠\,而在正则表达式中要匹配\则需要用四反斜杠\\\\。
java.util.regex包
java.util.regex 包主要包括以下三个类:Pattern 类,Matcher类和PatternSyntaxException类。
Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
- 静态方法:
Modifier and Type | Method | Description |
---|---|---|
static Pattern |
compile(String regex) |
Compiles the given regular expression into a pattern. |
static boolean |
matches(String regex, CharSequence input) |
Compiles the given regular expression and attempts to match the given input against it. |
如果仅仅是想测试输入字符串是否与给定正则表达式匹配,可以直接使用Pattern类的静态方法matches方法,或是使用String对象的matches方法。matches方法返回true需要整个句子匹配给定的正则表达式。
如果想测试输入字符串是否存在子串与给定的正则表达式匹配,可以使用Matcher对象的lookingAt和find方法。
- 非静态方法:
Modifier and Type | Method | Description |
---|---|---|
Matcher |
matcher(CharSequence input) |
Creates a matcher that will match the given input against this pattern. |
Matcher 类:
Matcher对象是对输入字符串进行解释和匹配操作的引擎,它和测试字符串绑定在了一起。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
- 索引方法
索引方法提供了有用的索引值,精确表明输入字符串中在哪能找到匹配。
序号 | 方法及说明 |
---|---|
1 | public int start() 返回当前匹配的子串的第一个字符在目标字符串中的索引位置 。 |
2 | public int start(int group) 返回当前匹配的指定组中的子串的第一个字符在目标字符串中的索引位置 。 |
3 | public int end() 返回当前匹配的子串的最后一个字符的下一个位置在目标字符串中的索引位置 。 |
4 | public int end(int group) 返回当前匹配的的指定组中的子串的最后一个字符的下一个位置在目标字符串中的索引位置 。 |
- 查找方法
查找方法用来检查输入字符串并返回一个布尔值,表示是否找到该模式。
Pattern类的静态方法matches有2个参数:代表正则表达式的字符串和代表输入的字符串;Matcher对象的matches方法没有参数。
序号 | 方法及说明 |
---|---|
1 | public boolean lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。 |
2 | public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。 |
3 | public boolean find(int start) 重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。 |
4 | public boolean matches() 尝试将整个区域与模式匹配。 |
- 替换方法
替换方法是替换输入字符串里文本的方法。
事实上更简单的替换方式是使用String对象的replaceAll和replaceFirst方法。
序号 | 方法及说明 |
---|---|
1 | public Matcher appendReplacement(StringBuffer sb, String replacement) 实现非终端添加和替换步骤。 |
2 | public StringBuffer appendTail(StringBuffer sb) 实现终端添加和替换步骤。 |
3 | public String replaceAll(String replacement) 替换模式与给定替换字符串相匹配的输入序列的每个子序列。 |
4 | public String replaceFirst(String replacement) 替换模式与给定替换字符串匹配的输入序列的第一个子序列。 |
5 | public static String quoteReplacement(String s) 返回指定字符串的字面替换字符串。这个方法返回一个字符串,就像传递给Matcher类的appendReplacement 方法一个字面字符串一样工作。 |