简介
JDK 4.0之后Java开始支持正则表达式, 有关正则表达式的包是java.util.regex.
包中主要有三个类:
-
Pattern: 用来表达和陈述搜索的模式. Pattern类没有公共的构造方法需要使用该类提供的静态方法compile(String regex)来创建一个Pattern对象.
-
Matcher: 真正影响搜索的对象. Matcher对象是对输入字符串进行解释和匹配的引擎. 该类也没有公共的构造方法需要使用Pattern类的matcher()方法获得对象.
-
PatternSyntaxException: 是一个非强制异常类, 它表示正则表达式语法出错.
示例
典型的正则表达式调用顺序
Pattern p = Pattern.compile("a*b");
Matcher m = Pattern.matcher("aaaab");
boolean b = m.matches();
如果仅使用一次正则表达式时, 可以直接使用Pattern类中的匹配方法:
boolean b = Pattern.matches("a*b", "aaaab");
由于下面的示例不能重复使用已编译好的模式(Pattern b)所以效率不高.
正则表达式语法
字符
| 构造 |
匹配 |
| x |
字符x |
| \\ |
反斜线 |
| \0n |
八进制值0n (0<=n<=7) |
| \0nn |
八进制值0nn (0<=n<=7) |
| \0mnn |
八进制值0mnn (0<=m<=3, 0<=n<=7) |
| \xhh |
16进制值0xhh (0<=h<=f) |
| \uhhhh |
16进制值0xhhhh (0<=h<=f) |
| \x{h…h} |
16进制值0xh…h (0<=h<=f) |
| \t |
制表符 |
| \n |
换行符 |
| \r |
回车符 |
字符类
| 构造 |
匹配 |
| [abc] |
a,b或c |
| [^abc] |
除了a,b和c的任何字符 |
| [a-zA-Z] |
a到z ∪ A到Z |
| [a-d[m-p]] |
a到d ∩ m到p |
| [a-z&&[def]] |
d,e或f(交集) |
| [a-z&&[^bc]] |
a-z,除了bc. 等同于[ad-z] |
| [a-z[^m-p]] |
a-z,而非m-p. 等同于[a-lq-z] |
预定义字符类
| 构造 |
匹配 |
| . |
任何字符 |
| \d |
数字, 等同于[0-9] |
| \D |
非数字, 等同于[^0-9] |
| \s |
空白字符, 等同于[\t,\n,\f,\r] |
| \S |
非空白字符 |
| \w |
单词字符 |
| \W |
非单词字符 |
边界匹配器
| 构造 |
匹配 |
| ^ |
行的开头 |
| $ |
行的结尾 |
| \b |
单词的边界 |
| \B |
非单词的边界 |
| \A |
输入的开头 |
| \G |
上一个匹配的结尾 |
| \Z |
输入的结尾 |
| \z |
输入的结尾 |
Greedy数量词
| 构造 |
匹配 |
| X? |
X,零次或一次 |
| X* |
X,零次或多次 |
| X+ |
X,一次或多次 |
| X{n} |
X,恰好n次 |
| X{n,} |
X,至少n次 |
| X{n,m} |
X,至少n次,最多m次 |
Logical运算符
| 构造 |
匹配 |
|
| XY |
XY |
|
| X |
Y |
X或Y |
| (X) |
X作为捕获组 |
|
非捕获组
其他语法
| 构造 |
匹配 |
| ? |
当此字符紧随在其他限定符之后, 表示匹配模式是非贪心的. 非贪心模式搜索到的是尽可能短的匹配字符串. 如用”o+?”匹配”oooo”的结果是”o”, “o+”结果是”oooo” |
参考文献
上一篇博客:java,javac,jar的用法
下一篇博客:MySQL的使用心得