正则表达式(regular expression, 简称 regex)是一种工具,正则表达式的两种基本用途是: 搜索和替换
正则表达式是用正则表达式语言创建的,这种语言是内置于其他程序语言或软件产品的"迷你"语言,正则表达式是区分大小写字母的
一 Java 对正则表达式的支持是从1.4版本开始的,Java 语言中的正则表达式匹配功能主要是通过java.util.regex.Matcher 类和以下方法实现的:
find() 在一个字符串里寻找一个给定模式的匹配 |
lookingAt() 用一个给定的模式去尝试匹配一个字符串的开头 |
matches() 用一个给定的模式去尝试匹配一个完整的字符串 |
replaceAll() 进行替换操作, 对所有的匹配都进行替换 |
replaceFirst() 进行替换操作, 只对第一个匹配进行替换. |
Matcher 类还有其他一些方法
java.util.regex.pattern类也提供了几个简单易用的包装器方法
compile() 把一个正则表达式编译成一个模式 |
flags() 返回某给定模式的匹配标志 |
matches() 在功能上等价于刚才介绍的matches() 方法 |
pattern() 把一个模式还原为一个正则表达式。 |
split() 把一个字符串拆分为子字符串. |
二 在网址: http://www.forta.com/books/0672325667/ 有一个名为 "Regular Expression Tester(正则表达式测试器)" 的工具软件可以下载
三 在正则表达式中,.字符(英文句号)可以匹配任何一个单个的字符、字母、数字、.字符本身 , 然而也并非绝对准确,在绝大多数的正则表达式里, .只能匹配除换行符以外的任何单个字符
1 在正则表达式中,用 模式 表示实际的正则表达式
2 .字符在正则表达式里有着特殊的含义。如果模式里需要一个.,必须在.的前面加上一个\(反斜杠)字符来对它进行转义
3 如果需要搜索\本身,就必须对\字符进行转义;相应的转义序列是两个连续的反斜杠字符\\
一个匹配单个字符的 示例:
文本
sales1.xls order3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xls sa1.xls |
正则表达式 .a.\.xls
结果
sales1.xls order3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xls sa1.xls |
四 匹配多个字符中的某一个
1 在正则表达式中,使用元字符 [ 和 ] 这两个字符来定义一个字符集合, 字符集合的匹配结果是能够与该集合里的任意一个成员相匹配的文本
一个匹配字符集合的示例
文本
sales1.xls order3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xls sa1.xls ca1.xls |
正则表达式 [ns]a.\.xls
结果
sales1.xls order3.xls sales2.xls sales3.xls apac1.xls europe2.xls na1.xls na2.xls sa1.xls ca1.xls |
2 在使用正则表达式的时候,会频繁地用到一些字符区间(0-9、A-Z),为了简化字符区间的定义,正则表达式提供了一个特殊的元字符 - ,字符区间可以用 - (连字符)来定义
以下都是合法的字符区间:
0-9 匹配0到9的所有数字
A-Z 匹配从A到Z 的所有大写字母
a-z 匹配从a到z的所有小写字母
A-z 匹配从ASCII字符A到ASCII字符z的所有字母, 这个表达式不常用,因为它还包含[和^等在ASCII 字符表里排列在Z和a之间的字符
但是要注意: 一定要避免让区间的尾字符小于首字符, 如[3-1] 是没有意义的,而且会让整个模式失效
3 - 字符是一个特殊的元字符,作为元字符只能用在[和]之间,在字符集合以外的地方,-只是一个普通字符,只能与-相匹配,- 字符本身不需要被转义
4 在一个字符集合里可以给出多个字符区间, 如[A-Za-z0-9]