正则表达式是功能强大,使用灵活的文本处理工具,它使用某字符串 集合中各串的公共特征来描述这个字符串,这种特征可以称为模式。利用模式处理文本比利用字符串更有效。java.util.regex包主要有Pattern、Matcher、PatternSyntaxException三个类支持正则表达式。
(一)正则表达类的基础
如果想表示一个数可能是负值,可以用负号加问号放在数字前,如—?8;如果表示一位数字,可以用反斜线和d表示如\\d;如果表示一位数以上,正则表达式写为\\d+;如果表示一个数字前可能有正号或负号,应该写为-|\\+,其中+是逻辑或。
例如:
(二)正则表达式字符类
下表列出构造正则表达式的字符类,表中方括号内的构造可以匹配一定范围的字符串。
字符类 | 含义 |
[abc] | a、b、或c(简单类) 除了abc外的任何字符(非) a~z或A~Z(含) a~d或m~p与[a-dm-p]等价(并) d、e或f(交) a~z除了b和c,等价[ad-z](差) a~z,且非m~p,等价[a-lq-z](差) |
实例:
(三)预定义字符集
表示某种缩写,见下表:
预定义字符 | 含义 |
. \d \D \s \S \w \W | 任何字符(不一定匹配行终止符) 一位数字:[0-9] 一位非数字:[`0-9] 一个空白字符:[\t\n\x0B\f\r] 一个非空白字符:[`\s] 一个词字符:[a-zA-Z_0-9] 一个非词字符:[`\w] |
(四)量词
量词用来说明读入文本的方式,有贪心的(Greedy),不情愿的(Reluctant),占有的(Possessive)三种。贪心是指匹配器先读入整个输入串进行匹配,不行再减少一个字符重新匹配。不情愿是指匹配器一次只读入一个字符进行匹配,最后才会读入整个字符串;占有的是指匹配器读入整个输入串进行一次匹配,不减少字符。
Greedy | Reluctant | Possessive | 含义 |
X? X* X+ X{n} X{n,} X{n,m} | X?? X*? X+? X{n}? X{n,}? X{n,m} | X?+ X*+ X++ X{n}+ X{n,}+ X{n,m}+ | X,一次或没有 X,零次或多次 X,一次或 多次 X,正好n次 X,至少n次 X,至少n次但不超过m次 |
(五)边界匹配字符
边界匹配字符可以指明匹配在哪里进行,如下表
边界匹配符 | 含义 |
` $ \b \B \A \G \Z \z | 行的开头 一行的尾部 一个词的边界 一个非词的边界 输入的开头 前次匹配的尾部 输入的尾部,但是用于最后终止符(如果有) 输入的尾部 |
(六)Pattern类
Pattern类提供了一个compile()方法,可以接受一组标志影响模式匹配的方式。例如Pattern.CASE_INSENSITIVE,允许部分大小写字母匹配。
Pattern提供了matches()方法,允许快速检查给输入字符串中有无指定模式,它是静态方法,要有Pattern类名来调用。
Pattern提供了spilt()方法,把按正则表达式分界的字符串分解为一个字符串组。
(七)Matcher类
提供了解释模式和执行匹配操作的方法
(八)PatternSyntaxException类
该类用于检查正则表达式模式中的语法错误。
除了abc外的任何字符(非)
a~z或A~Z(含)
a~d或m~p与[a-dm-p]等价(并)