知识大全 Java正则表达式详解(上)
Posted 符号
篇首语:历览千载书,时时见遗烈。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java正则表达式详解(上)相关的知识,希望对你有一定的参考价值。
Java正则表达式详解(上) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
如果你曾经用过Perl或任何其他内建正则表达式支持的语言 你一定知道用正则表达式处理文本和匹配模式是多么简单 如果你不熟悉这个术语 那么 正则表达式 (Regular Expression)就是一个字符构成的串 它定义了一个用来搜索匹配字符串的模式 许多语言 包括Perl PHP Python javascript和JScript 都支持用正则表达式处理文本 一些文本编辑器用正则表达式实现高级 搜索 替换 功能 那么Java又怎样呢?本文写作时 一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可 你可以期待在JDK的下一版本中看到它 然而 如果现在就需要使用正则表达式 又该怎么办呢?你可以从下载源代码开放的Jakarta ORO库 本文接下来的内容先简要地介绍正则表达式的入门知识 然后以Jakarta ORO API为例介绍如何使用正则表达式 一 正则表达式基础知识 我们先从简单的开始 假设你要搜索一个包含字符 cat 的字符串 搜索用的正则表达式就是 cat 如果搜索对大小写不敏感 单词 catalog Catherine sophisticated 都可以匹配 也就是 句点符号 假设你在玩英文拼字游戏 想要找出三个字母的单词 而且这些单词必须以 t 字母开头 以 n 字母结束 另外 假设有一本英文字典 你可以用正则表达式搜索它的全部内容 要构造出这个正则表达式 你可以使用一个通配符——句点符号 这样 完整的表达式就是 t n 它匹配 tan ten tin 和 ton 还匹配 t#n tpn 甚至 t n 还有其他许多无意义的组合 这是因为句点符号匹配所有字符 包括空格 Tab字符甚至换行符 方括号符号 为了解决句点符号匹配范围过于广泛这一问题 你可以在方括号( [] )里面指定看来有意义的字符 此时 只有方括号里面指定的字符才参与匹配 也就是说 正则表达式 t[aeio]n 只匹配 tan Ten tin 和 ton 但 Toon 不匹配 因为在方括号之内你只能匹配单个字符 或 符号 如果除了上面匹配的所有单词之外 你还想要匹配 toon 那么 你可以使用 | 操作符 | 操作符的基本意义就是 或 运算 要匹配 toon 使用 t(a|e|i|o|oo)n 正则表达式 这里不能使用方扩号 因为方括号只允许匹配单个字符 这里必须使用圆括号 () 圆括号还可以用来分组 具体请参见后面介绍 表示匹配次数的符号 表一显示了表示匹配次数的符号 这些符号用来确定紧靠该符号左边的符号出现的次数 假设我们要在文本文件中搜索美国的社会安全号码 这个号码的格式是 用来匹配它的正则表达式如图一所示 在正则表达式中 连字符( )有着特殊的意义 它表示一个范围 比如从 到 因此 匹配社会安全号码中的连字符号时 它的前面要加上一个转义字符 \\ 图一 匹配所有 形式的社会安全号码 假设进行搜索的时候 你希望连字符号可以出现 也可以不出现——即 和 都属于正确的格式 这时 你可以在连字符号后面加上 ? 数量限定符号 如图二所示 图二 匹配所有 和 形式的社会安全号码 下面我们再来看另外一个例子 美国汽车牌照的一种格式是四个数字加上二个字母 它的正则表达式前面是数字部分 [ ] 再加上字母部分 [A Z] 图三显示了完整的正则表达式 图三 匹配典型的美国汽车牌照号码 如 KV 否 符号 ^ 符号称为 否 符号 如果用在方括号内 ^ 表示不想要匹配的字符 例如 图四的正则表达式匹配所有单词 但以 X 字母开头的单词除外 图四 匹配所有单词 但 X 开头的除外 圆括号和空白符号 假设要从格式为 June 的生日日期中提取出月份部分 用来匹配该日期的正则表达 图五 匹配所有Moth DD YYYY格式的日期 新出现的 \\s 符号是空白符号 匹配所有的空白字符 包括Tab字符 如果字符串正确匹配 接下来如何提取出月份部分呢?只需在月份周围加上一个圆括号创建一个组 然后用ORO API(本文后面详细讨论)提取出它的值 修改后的正则表达式如图六所示 图六 匹配所有Month DD YYYY格式的日期 定义月份值为第一个组 其它符号 为简便起见 你可以使用一些为常见正则表达式创建的快捷符号 如表二所示 表二 常用符号 例如 在前面社会安全号码的例子中 所有出现 [ ] 的地方我们都可以使用 \\d 修改后的正则表达式如图七所示 图七 匹配所有 格式的社会安全号码 二 Jakarta ORO库 有许多源代码开放的正则表达式库可供Java程序员使用 而且它们中的许多支持Perl 兼容的正则表达式语法 我在这里选用的是Jakarta ORO正则表达式库 它是最全面的正则表达式API之一 而且它与Perl 正则表达式完全兼容 另外 它也是优化得最好的API之一 Jakarta ORO库以前叫做OROMatcher Daniel Savarese大方地把它赠送给了Jakarta Project 你可以按照本文最后参考资源的说明下载它 我首先将简要介绍使用Jakarta ORO库时你必须创建和访问的对象 然后介绍如何使用Jakarta ORO API ▲ PatternCompiler对象 首先 创建一个Perl Compiler类的实例 并把它赋值给PatternCompiler接口对象 Perl Compiler是PatternCompiler接口的一个实现 允许你把正则表达式编译成用来匹配的Pattern对象 ▲ Pattern对象 要把正则表达式编译成Pattern对象 调用piler对象的pile()方法 并在调用参数中指定正则表达式 例如 你可以按照下面这种方式编译正则表达式 t[aeio]n 默认情况下 编译器创建一个大小写敏感的模式(pattern) 因此 上面代码编译得到的模式只匹配 tin tan ten 和 ton 但不匹配 Tin 和 taN 要创建一个大小写不敏感的模式 你应该在调用编译器的时候指定一个额外的参数 创建好Pattern对象之后 你就可以通过PatternMatcher类用该Pattern对象进行模式匹配 ▲ PatternMatcher对象 PatternMatcher对象根据Pattern对象和字符串进行匹配检查 你要实例化一个Perl Matcher类并把结果赋值给PatternMatcher接口 Perl Matcher类是PatternMatcher接口的一个实现 它根据Perl 正则表达式语法进行模式匹配 使用PatternMatcher对象 你可以用多个方法进行匹配操作 这些方法的第一个参数都是需要根据正则表达式进行匹配的字符串 ·boolean matches(String input Pattern pattern) 当输入字符串和正则表达式要精确匹配时使用 换句话说 正则表达式必须完整地描述输入字符串 ·boolean matchesPrefix(String input Pattern pattern) 当正则表达式匹配输入字符串起始部分时使用 ·boolean contains(String input Pattern pattern) 当正则表达式要匹配输入字符串的一部分时使用(即 它必须是一个子串) 另外 在上面三个方法调用中 你还可以用PatternMatcherInput对象作为参数替代String对象 这时 你可以从字符串中最后一次匹配的位置开始继续进行匹配 当字符串可能有多个子串匹配给定的正则表达式时 用PatternMatcherInput对象作为参数就很有用了 用PatternMatcherInput对象作为参数替代String时 上述三个方法的语法如下 ·boolean matches(PatternMatcherInput input Pattern pattern) ·boolean matchesPrefix(PatternMatcherInput input Pattern pattern) ·boolean contains(PatternMatcherInput input Pattern pattern) cha138/Article/program/Java/hx/201311/25544相关参考
Java正则表达式详解(下) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! HTML处理实例二
本篇文章是对js中正则表达式的使用进行了详细的分析介绍需要的朋友可以参考下 js中的正则表达式比起C#中的正则表达式要弱很多但基本够用了定义正则表达式关于验证的三个这则表达式方法正则表达
三括号或匹配 在正则表达式中由于[]号只能做单个元素的匹配这样会限制正则表达式的作用如何做到多个元素的匹配呢?用()实现 ()可以进行多个元素的匹配例如:t(a|e|i|o|oo)n|在正则表
JAVA正则表达式4种常用的功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!正则表达式在字符串处
四非匹配 在正则表达式中我们往往需要在字符串中进行非匹配这时就要通过^进行匹配条件限制^的常见入门用法如下: [^az] 条件限制在非小写atoz
Java中的17种常用正则表达式归纳 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! ^\\\\d
Java中使用正则表达式验证本地化数据 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!数据验证是编写
构建用于正则表达式的抽象JavaAPI 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在我的经验
cha138/Article/program/Java/hx/201311/26752
cha138/Article/program/Java/JSP/201311/20024