正则表达式可以描述一种字符串特征的模式,并根据该特征来对于有相同特征的字符串进行匹配。
在正则表达式中,特定的字符可以匹配确定的字符或字符串。正则表达式中字符的匹配行为如下表所示
元字符 |
行为 |
示例 |
---|---|---|
* |
零次或多次匹配前面的字符或子表达式。 等效于 {0,}。 |
zo* 与“z”和“zoo”匹配。 |
+ |
一次或多次匹配前面的字符或子表达式。 等效于 {1,}。 |
zo+ 与“zo”和“zoo”匹配,但与“z”不匹配。 |
? |
零次或一次匹配前面的字符或子表达式。 等效于 {0,1}。 当 ?紧随任何其他限定符(*、+、?、{n}、{n,} 或 {n,m})之后时,匹配模式是非贪婪的。非贪婪模式匹配搜索到的、尽可能少的字符串,而默认的贪婪模式匹配搜索到的、尽可能多的字符串。 |
zo? 与“z”和“zo”匹配,但与“zoo”不匹配。 o+? 只与“oooo”中的单个“o”匹配,而 o+ 与所有“o”匹配。 do(es)? 与“do”或“does”中的“do”匹配。 |
^ |
匹配搜索字符串开始的位置。如果标志中包括 m(多行搜索)字符,^ 还将匹配 或 后面的位置。 如果将 ^ 用作括号表达式中的第一个字符,则会对字符集求反。 |
^d{3} 与搜索字符串开始处的 3 个数字匹配。 [^abc] 与除 a、b 和 c 以外的任何字符匹配。 |
$ |
匹配搜索字符串结尾的位置。如果标志中包括 m(多行搜索)字符,^ 还将匹配 或 前面的位置。 |
d{3}$ 与搜索字符串结尾处的 3 个数字匹配。 |
. |
匹配除换行符 之外的任何单个字符。若要匹配包括 在内的任意字符,请使用诸如 [sS] 之类的模式。 |
a.c 与“abc”、“a1c”和“a-c”匹配。 |
[] |
标记括号表达式的开始和结尾。 |
[1-4] 与“1”、“2”、“3”或“4”匹配。[^aAeEiIoOuU] 与任何非元音字符匹配。 |
{} |
标记限定符表达式的开始和结尾。 |
a{2,3} 与“aa”和“aaa”匹配。 |
() |
标记子表达式的开始和结尾。可以保存子表达式以备将来之用。 |
A(d) 与“A0”至“A9”匹配。保存该数字以备将来之用。 |
| |
指示在两个或多个项之间进行选择。 |
z|food 与“z”或“food”匹配。(z|f)ood 与“zood”或“food”匹配。 |
/ |
表示 JScript 中的文本正则表达式模式的开始或结尾。在第二个“/”后添加单字符标志可以指定搜索行为。 |
/abc/gi 是与“abc”匹配的 JScript 文本正则表达式。g(全局)标志指定查找模式的所有匹配项,i(忽略大小写)标志使搜索不区分大小写。 |
|
将下一字符标记为特殊字符、文本、反向引用或八进制转义符。 |
与换行符匹配。( 与“(”匹配。\ 与“”匹配。 |
Java中通过java.util.regex包来实现正则表达式。在包中主要包括以下三个类:
- Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
- Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
- PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误
在正则表达式的使用中,首先确定好正则表达式字符串,通过Pattern类来初始化。然后通过Matcher类的方法根据正则字符串来对原始字符串进行索引、查找、替换等操作。