快速业务通道

Merlin的魔力: 用新的正则表达式库解析字符序列 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-20

Merlin的魔力: 用新的正则表达式库解析字符序列

时间:2011-02-02 IBM John Zukowski

解析模式的文本字符串

正则表达式是根据文本匹配模式的方法 ― 类似于编译器生成类文件的工作原理。编译器在源代码中查找各种模式以便将源代码表达式转换为字节码。通过识别这些源代码模式,编译器能够只将有效的源代码表示转换为已编译的类文件。

什么是模式?

在正则表达式的上下文中,模式是字符序列的文本表示法。例如,如果您想知道一个字符序列中是否存在 car这个词,您会使用模式 car,因为这是精确地表示该字符串的方法。对于更复杂的模式,您可以使用特殊字符作为占位符。如果您不是要搜索 car,而是想搜索以字母 c开头并以字母 r结尾的任何文本字符串,您会使用 c*r模式,其中 *代表第一个 r前的任意多个字符。 c*r模式将匹配任何以 c开头并以 r结尾的字符串,如 cougar、 cavalier或 chrysler。

如何指定模式表达式

模式匹配的主要部分是关于要使用什么样的表达式。 Pattern 先保存要使用的表达式,然后将其传递给 Matcher 类以便在字符序列的上下文中检查其匹配情况。例如,如果您想验证一个电子邮件地址,您可能要检查用户输入是否与这样一个模式匹配 ― 它包含一个字母数字序列,后跟一个 @ 符号,@ 后又跟两组用句点隔开的字符。这可以用表达式 \p{Alnum}+@\w+\.\p{Alpha}{2,3} 来表示。(是的,这过于简化了电子邮件地址的结构,可能会排除某些有效的电子邮件地址,但它作为示例已经足够了。)

在讨论模式语言的具体细节之前,我们来仔细看一下 \p{Alnum}+@\w+\.\p{Alpha}{2,3} 。 \p{Alnum} 序列表示单个字母数字字符(A 到 Z、a 到 z 或 0 到 9)。 \p{Alnum} 后面的加号(+)被称为 量词(quantifier)。它被应用在表达式的前面部分,表示 \p{Alnum} 必须出现一次或更多次。使用星号(*)表示要出现零次或一次以上(含一次)。@ 就是意味着它必须出现在至少一个字母数字字符之后,这样整个模式匹配才能成功。 \w+ 与 \p{Alnum}+ 类似,但添加了下划线(_)。某些序列有多个表达式。反斜杠(\ .)代表句点。如果前面没有反斜杠,单独一个句点代表任意字符。最后的 \p{Alpha}{2, 3} 表示两个或三个字母字符。

只要学会了规范语言,您就能掌握模式的所有秘密。我们来看一些更常用的表达式的种类:

文字(Literal):表达式内任何不具有特殊意义的字符都被看作是一个文字,并与自身匹配。

量词(Quantifier):某些字符或表达式,它们被用来计算一个文字或分组可以在字符序列中出现的次数,以便该序列与表达式匹配。分组是由圆括号内的一组字符指定的。

? 表示出现一次或根本不出现

* 表示出现零次或一次以上(含一次)

+ 表示出现一次或多次

字符类(Character class):一个字符类就是方括号内的一个字符集,其中,匹配可以是括号内的任意一个字符。您可以把字符类与量词结合在一起,例如, [acegikmoqsuwy]* 将是只包含字母表中奇数字母的任意字符序列。某些字符类是预先定义的:

\d ― 数字(0 到 9)

\D -- 非数字

\s -- 空白字符,如制表符或换行符

\S -- 非空白字符

\w -- 单字字符(a 到 z、A 到 Z、0 到 9 以及下划线)

\W -- 非单字字符(其它任意字符)

Merlin的魔力: 用新的正则表达式库解析字符序列(2)

时间:2011-02-02 IBM John Zukowski

Posix 字符类(Posix character class):某些字符类仅在用于 US-ASCII 比较时才有效。例如:

\p{Lower} ― 小写字符

\p{Upper} ― 大写字符

\p{ASCII} ― 所有 ASCII 字符

\p{Alpha} ― 字母字符(\p{Lower} 与 \p{Upper} 相结合)

\p{Digit} ― 从 0 到 9 的数字

\p{Alnum} ― 字母数字字符

范围(Range):使用短线(dash)来指定包括一定范

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号