当前位置:文档之家› 正则表达式

正则表达式


Ver. 1.0
Slide 5 of 19
Developing Object-Based Applications in Java
正则表达式基础知识
“或”符号(“|”) 如果除了上面匹配的所有单词之外,你还想要匹配 “toon”,那么,你可以使用“|”操作符。“|”操作符的 基本意义就是“或”运算。要匹配“toon”,使用 “t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因 为方括号只允许匹配单个字符;这里必须使用圆括号 “()”。圆括号还可以用来分组,具体请参见后面介绍:
Ver. 1.0
Slide 14 of 19
Developing Object-Based Applications in Java
正则表达式基础知识 例如,在前面一串数字号码的例子中,所有出现“[0-9]”的地方我 们都可以使用“\d”。修改后的正则表达式如图七所示:
图七:匹配所有123-12-1234格式的数字号码
Slide 18 of 19
()
Ver. 1.0
Developing Object-Based Applications in Java
JAVA中的正则表达式语法 元字符
| && + ? {n} {n,} {n,m} \b \B
说明
将两个匹配条件进行逻辑“或”运算。'z|food' 能匹配 "z" 或 "food"。 '(z|f)ood' 则匹配 "zood" 或 "food"。 将两个匹配条件进行逻辑“与”运算。 匹配前面的子表达式一次或多次。例如正则表达式9+匹配9、99、999等。 匹配前面的子表达式零次或一次。例如,“do(es)?” 可以匹配 “do” 或 “does” 中的“do” 。此元字符还有另外一个用途,就是表示非贪婪模式 匹配 匹配确定的 n 次。例如,“e{2}”不能匹配“bed”中的“d”,但是能匹配 “seed”中的两个“e”。 至少匹配n次。例如,“e{2,}”不能匹配“bed”中的“e”,但能匹配 “seeeeeeeed”中的所有“e”。 最少匹配 n 次且最多匹配 m 次。“e{1,3}”将匹配“seeeeeeeed”中的前三 个“e”。 匹配一个单词边界,也就是指单词和空格间的位置。例如,“er\b”可以匹 配“never”中的“er”,但不能匹配“verb”中的“er”。 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never” 中的“er”。
Ver. 1.0
Slide 3 of 19
Developing Object-Based Applications in Java
正则表达式基础知识 句点符号(“.”)
假设你在玩英文拼字游戏,想要找出三个字母的单词,而 且这些单词必须以“t”字母开头,以“n”字母结束。另外, 假设有一本英文字典,你可以用正则表达式搜索它的全 部内容。要构造出这个正则表达式,你可以使用一个通 配符——句点符号“.”。这样,完整的表达式就是“t.n”, 它匹配“tan”、“ten”、“tin”和“ton”,还匹配“t#n”、“tpn” 甚至“t n”,还有其他许多无意义的组合。这是因为句点 符号匹配所有字符,包括空格、Tab字符甚至换行符:
Slide 17 of 19
$
^
*
Ver. 1.0
Developing Object-Based Applications in Java
JAVA中的正则表达式语法
元字符
[]
说明
两种功能: 1、匹配括号中的任何一个字符。例如正则表达式 “b[aui]g”匹配bag、big和bug,但是不匹配beg。可以 在括号中使用连字符“-”来指定字符的区间来简化表示, 例如正则表达式[0-9]可以匹配任何数字字符,这样正则表 达式“a[.]c”就可以匹配“a0c”、“a1c”、“a2c”等字符 串;还可以制定多个区间,例如“[A-Za-z]”可以匹配任何 大小写字母。 2、还有一个相配合使用的元字符“^”,用在这里并不像 前边的那个“^”一样表示匹配行开始,而是表示“排除”, 要想匹配除了指定区间之外的字符,就可以在左边的括号 和第一个字符之间使用^字符,例如“[^163A-Z]”将能偶 匹配除了1、6、3和所有大写字母之外的任何字符。 将 () 之间括起来的表达式定义为“组”(group),并且将 匹配这个表达式的字符保存到一个临时区域,这个元字符在 字符串提取的时候非常有用。
JAVA中的正则表达式语法
元字符
.
说明
匹配任何单个字符。例如正则表达式 “b.g”能匹配如下字符串:“big”、 “bug”、“b g”,但是不匹配“buug”。 匹配行结束符。例如正则表达式“EJB$” 能够匹配字符串“I like EJB”的末尾,但 是不能匹配字符串“J2EE Without EJBs!”。 匹配一行的开始。例如正则表达式 “^Spring”能够匹配字符串“Spring is a J2EE framework”的开始,但是不能匹 配“I use Spring in my project”。 匹配0至多个在它之前的字符。例如正则 表达式“z*”能匹配“z”以及“zoo”;正 则表达式“.*”意味着能够匹配任意字符串。
图五:匹配所有Moth DD,YYYY格式的日期
Ver. 1.0
Slide 12 of 19
Developing Object-Based Applications in Java
正则表达式基础知识
新出现的“\s”符号是空白符号,匹配所有的空白字符, 包括Tab字符。如果字符串正确匹配,接下来如何提取 出月份部分呢?只需在月份周围加上一个圆括号创建一 个组,然后用ORO API(本文后面详细讨论)提取出它 的值。修改后的正则表达式如图六所示:
Slide 16 of 19
除了括号内范围中的字符之外的任一字符 [!x-z] 前一个字符或表达式的 n 个匹配项 前一个字符或表达式的至少 n 个匹配项 前一个字符或表达式的 n 到 m 个匹配项 {n} {n,} {n,m}
前一个字符或表达式的一个或多个匹配项 @
Ver. 1.0
Developing Object-Based Applications in Java
Ver. 1.0
Slide 15 of 19
Developing Object-Based Applications in Java
WORD中常用的正则表达式
用于查找 任一字符 任何字符串 单词开头 单词结尾 指定字符之一 此范围内的任一字符 类型 ? * < > [] [-] 示例 s?t 可找到“sat”和“set”。 s*d 可找到“sad”和“started”。 <(inter) 可找到“interesting”和 “intercept”,但找不到“splintered”。 (in)> 可找到“in”和“within”,但找不到 “interesting”。 w[io]n 可找到“win”和“won”。 [r-t]ight 可找到“right”和“sight”。范围 必须是升序。 t[!a-m]ck 可找到“tock”和“tuck”,但找 不到“tack”或“tick”。 fe{2}d 可找到“feed”,但找不到“fed”。 fe{1,}d 可找到“fed”和“feed”。 10{1,3} 可找到“10”、“100”和“1000”。 lo@t 可找到“lot”和“loot”。
图三:匹配典型的美国汽车牌照号码,如8836KV
Ver. 1.0
Slide 10 of 19
Developing Object-Based Applications in Java
正则表达式基础知识
“否”符号(“^”) “^”符号称为“否”符号。如果用在方括号内,“^”表示不 想要匹配的字符。例如,图四的正则表达式匹配所有 单词,但以“X”字母开头的单词除外:
正则表达式基础知识
假设我们要在文本文件中搜索一串数字号码。这个号 码的格式是999-99-9999。用来匹配它的正则表达式如 图一所示。在正则表达式中,连字符(“-”)有着特 殊的意义,它表示一个范围,比如从0到9。因此,匹 配该串数字号码中的连字符号时,它的前面要加上一 个转义字符“\”。
图一:匹配所有123-12-1234形式的数字号码
图四:匹配所有单词,但“X”开头的除外
Ver. 1.0
Slide 11 of 19
Developing Object-Based Applications in Java
正则表达式基础知识
圆括号和空白符号 假设要从格式为“June 26, 1951”的生日日期中提取出 月份部分,用来匹配该日期的正则表达式可以如图五 所示:
Ver. 1.0
Slide 2 of 19
Developing Object-Based Applications in Java
正则表达式基础知识
我们先从简单的开始。假设你要搜索一个包含字符 “cat”的字符串,搜索用的正则表达式就是“cat”。 如果搜索对大小写不敏感,单词“catalog”、 “Catherine”、“sophisticated”都可以匹配。也就是 说:
Ver. 1.0
Slide 4 of 19
Developing Object-Based Applications in Java
正则表达式基础知识
方括号符号(“[ ]”) 为了解决句点符号匹配范围过于广泛这一问题,你可以 在方括号(“[ ]”)里面指定看来有意义的字符。此时, 只有方括号里面指定的字符才参与匹配。也就是说, 正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和 “ton”。但“Toon”不匹配,因为在方括号之内你只能 匹配单个字符:
相关主题