有许多源代码开放的正则表达式库可供Java程序员使用,而且它们中的许多支持Perl 5兼容的正则表达式语法。我在这里选用的是Jakarta-ORO正则表达式库,它是最全面的正则表达式API之一,而且它与Perl 5正则表达式完全兼容。另外,它也是优化得最好的API之一。

Jakarta-ORO库以前叫做OROMatcher,Daniel Savarese大方地把它赠送给了Jakarta Project。你可以按照本文最后参考资源的说明下载它。

我首先将简要介绍使用Jakarta-ORO库时你必须创建和访问的对象,然后介绍如何使用Jakarta-ORO API。

▲ PatternCompiler对象

首先,创建一个Perl5Compiler类的实例,并把它赋值给PatternCompiler接口对象。Perl5Compiler是PatternCompiler接口的一个实现,允许你把正则表达式编译成用来匹配的Pattern对象。

▲ Pattern对象

要把正则表达式编译成Pattern对象,调用compiler对象的compile()方法,并在调用参数中指定正则表达式。例如,你可以按照下面这种方式编译正则表达式“t[aeio]n”:

默认情况下,编译器创建一个大小写敏感的模式(pattern)。因此,上面代码编译得到的模式只匹配“tin”、“tan”、 “ten”和“ton”,但不匹配“Tin”和“taN”。要创建一个大小写不敏感的模式,你应该在调用编译器的时候指定一个额外的参数:

创建好Pattern对象之后,你就可以通过PatternMatcher类用该Pattern对象进行模式匹配。

▲ PatternMatcher对象

PatternMatcher对象根据Pattern对象和字符串进行匹配检查。你要实例化一个Perl5Matcher类并把结果赋值给PatternMatcher接口。Perl5Matcher类是PatternMatcher接口的一个实现,它根据Perl 5正则表达式语法进行模式匹配:

使用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)

java patterncompiler_PatternCompiler是干什么用的?相关推荐

  1. Java主要是干什么的

    Java主要是干什么的?今天朗沃小刘小编来谈谈java主要是干什么的, 首先官方点解释java是什么,Java是一门面向对象编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承.指针等概 ...

  2. java quartz 是干什么的_Quartz可以用来做什么

    废话的前言 以前凭借年轻,凡事都靠脑记.现在工作几年后发现,很多以前看过.用过的东西,再次拿起的时候总觉得记不牢靠."好记性不如烂笔头"应该是某位上了年纪的大叔的切肤之痛(仅次于上 ...

  3. java内部类是干什么的_Java内部类有什么作用

    Java内部类有什么作用 ?java内部类介绍.java内部类有什么好处?为什么需要内部类? 1.举一个简单的例子,如果你想实现一个接口,但是这个接口中的一个方法和你构想的这个类中的一个方法的名称,参 ...

  4. java工作描述_java工程师工作描述状况是干什么的?需要身怀哪些技能呢?

    有时候,小编也会想Java工程师是干什么的?需要掌握哪些技能等等一系列问题,小伙伴们是不是跟小编有同样的疑惑呢?接下来就跟小编一起了解Java工程师的工作当中的问题吧. 首先Java工程师的是做什么的 ...

  5. jdbc是java语言编写的类和接口_JDBC——Java语言连接数据库的标准

    JDBC概述 API JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...

  6. 学 Python 和学 Java ,哪个好找工作?

    对于程序员初学者,或者稍微了解互联网行业的人,这几年最频繁地听到的两种编程语言就是 Python 与 Java . 如果你问一名 Java 程序员,肯定会建议你先学 Java,因为他们认为Python ...

  7. 你觉得学 Python 还是 Java 更好找工作?

    [此文章转自乐字节] 对于程序员初学者,或者稍微了解互联网行业的人,这几年最频繁地听到的两种编程语言就是 Python 与 Java . 如果你问一名 Java 程序员,肯定会建议你先学 Java,因 ...

  8. java环境配置——JDK安装

    [初识java] 参考说明:https://jingyan.baidu.com/article/e5c39bf5ca44d639d7603332.html(百度经验) 在开始学习java的时候,我们先 ...

  9. java正则表达式解析

    "正则表达式"到用时方恨少! 学习正则表达式,我觉得还是要循循渐进,由易到难,一点点深入......(本人也在学习中这里提供个人理解思路,以及一些大神们的独到讲解......) 一 ...

最新文章

  1. boost::adaptors相关的测试程序
  2. LAMP和LNMP去除index.php访问
  3. 一起谈.NET技术,Microsoft NLayerApp案例理论与实践 - 项目简介与环境搭建
  4. mysql timestamp 值_mysql中TIMESTAMP设置默认值的灵活运用
  5. oracle存储过程中返回一个程序集
  6. div圆角,阴影效果。
  7. 2017杭州云栖大会参会体验
  8. 时代潮流-云原生数据库的崛起
  9. Redis常用基本命令(1)
  10. cesium绘制折线_polyline
  11. 整型到底占几个字节呢?
  12. 洛谷 P8584 探索未知 题解
  13. Python学习记录(4)元组:戴了紧箍咒的列表
  14. android 电量控制
  15. 3词法分析 - 有穷自动机
  16. Xilinx 7系列FPGA之Virtex-7产品简介
  17. 程序员的六大赚钱副业!
  18. WindowsServer教程一:SSMS连接数据库相关配置
  19. Win10无法彻底删除蓝牙设备,无线蓝牙鼠标连接后不能删除
  20. 问题 Q: 5.18 兔子繁殖(2级)假设一对兔子(一雌一雄)每个月可繁殖出一对小兔子来,并且所有的兔子都不死,这样从第一个月开始在笼中圈养一对有繁殖能力的小兔子,那么month个月可以繁殖多少对兔子

热门文章

  1. 推荐一些顶级的Android开发书籍(转)
  2. 怎样在nexus 中 搜索到远程maven仓库中的jar 文件
  3. linux中O(1)调度算法与全然公平(CFS)调度算法
  4. 计算机基础名词概念(一)
  5. 文件属性及资源文件的使用
  6. C#.net模拟提交表单POST
  7. CSS有效的编写代码
  8. ubuntu+php+mysql+apache安装配置
  9. redis未能启动服务器,redis服务启动不了的解决办法(服务器应非法关机了)
  10. androidwakelock_Android音频播放时wakelock的实现