`
yysct2005
  • 浏览: 90615 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 正则表达式全攻略(七)

    博客分类:
  • java
阅读更多

Java 正则表达式全攻略(七)

[ 2010-04-23 12:47:35.0 | 作者: 随想 类别: 基础强化 ] 来源:原创     浏览 1414
labels:Java 正则表达式全攻略(七) java正则表达式

原子组与防治回溯

原子组在 Java 里也被称为“独立非捕获组”,.Net方面的说法称为“贪婪子表达式”,不过我还是觉得称为原子组更合适些。它的语法为 (?>X) ,具体来说,使用原子组匹配和正常的匹配没有差别,只是在匹配到原子组结束时(即闭括号之后),原子组中的所有可供回溯的备用状态都会被丢弃。也就是说, 在原子组匹配结束时,原子组的匹配内容只能整体保留或丢弃,回溯始终不能使用这些已匹配过的内容。

还是以一个实例来说明原子组会更为清晰。例如使用 a(bc|b)c (捕获组)这一表达式你可以匹配 abcc 和 abc,但如果使用 a(?>bc|b)c (原子组)这表达式,你只能匹配 abcc 而不能匹配 abc。
在匹配 abc 时,两个表达式都会先匹配到 a ,然后在成功匹配到 bc ,再接着尝试匹配 c ,这时就会出现匹配失败。一般捕获组的表达式,这时会回溯到进入组前的状态,再匹配另一条路径,先匹配 b 成功,再重新尝试匹配 c 也成功,这是 abc 的匹配就成功了。而使用原子组的表达式,由于在 bc 匹配成功,结束组时就备份状态丢弃了,所以当匹配 c 失败时,就是直接的失败,表达式引擎并没有其它状态可供回溯。

使用原子组可以有效地防止不必要的回溯,因此可以大大提高表达式的性能。

匹配模式

在 Java 内我们除了可以在创建 Pattern 对象实例时,声明匹配模式外,还可以直接在表达式内声明表达式的匹配模式。下面为可用匹配标识的具体含义:

i
CASE_INSENSITIVE
启用不区分大小写的匹配
d
UNIX_LINES
启用 Unix 行模式。在此模式中,.、^ 和 $ 的行为中仅识别 '\n' 行结束符。
m
MULTILINE
启用多行模式。
s
DOTALL
启用 dotall 模式。在 dotall 模式中,表达式 . 可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符。
u
UNICODE_CASE
启用 Unicode 感知的大小写折叠。
x
COMMENTS
模式中允许空白和注释。

以下面的代码来说:

   1:


 String regex = "(?i)ab(?-i)cd"
;

   2:


 assertThat(Pattern.matches(regex, "ABcd"
), is(true));

   3:


 assertThat(Pattern.matches(regex, "abCD"
), is(false));

(?i) 开启了不区分大小写,所以 ABcd 可以被匹配;而 (?-i) 则为关闭不区分大小写,所以 abCD 无法被匹配。对上面的表达式,Java 还支持另一种写法 (?i:ab)(?-i:cd)

分享到:
评论

相关推荐

    java正则表达式.zip

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它基于模式匹配的概念,能够高效地进行文本搜索、替换和解析。在Java中,正则表达式主要通过`java.util.regex`包来实现,提供了Pattern和Matcher两个核心...

    使用Java正则表达式分析处理日志

    本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...

    Java正则表达式 Java 正则表达式

    Java正则表达式是Java语言中用于处理字符串的强大工具,它允许程序员进行复杂的字符串匹配、查找和替换操作。正则表达式(Regular Expression)是一种模式匹配语言,通过特定的语法来描述字符串的模式,用于在文本中...

    Java使用正则表达式提取XML节点内容的方法示例

    为了帮助开发者更好地掌握Java正则表达式技术,我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧...

    JAVA正则表达式大全

    在Java编程语言中,正则表达式被广泛应用于数据验证、文本提取和字符串操作。以下是对这些文档标题所涉及的Java正则表达式知识点的详细解释: 1. **正则表达式之道** 这个主题可能涵盖了正则表达式的基础概念,...

    java正则表达式匹配工具

    Java正则表达式匹配工具是IT领域中一种强大的文本处理工具,它利用正则表达式(Regular Expression)的规则来查找、替换或者提取文本中的特定模式。正则表达式是一种特殊的字符序列,能够帮助程序员或者用户高效地...

    Java正则表达式.ppt

    Java正则表达式是一种强大的文本处理工具,广泛用于验证字符串、查找特定模式和替换文本。在Java中,正则表达式提供了简洁而灵活的方式来处理字符串,使得编程人员能够以更高效的方式实现各种文本操作。 正则表达式...

    java正则表达式验证IP地址

    Java正则表达式验证IP地址 Java正则表达式验证IP地址是指使用Java语言中的正则表达式来验证IP地址是否符合标准。IP地址是指在网络通信中用来标识设备的地址,它是一种逻辑地址,通过它可以找到网络中的设备。在...

    java 正则表达式应用jar包 regex-smart.jar

    Java正则表达式是编程语言Java中的一个强大工具,它用于模式匹配、数据验证和文本检索替换。在Java中,正则表达式是通过java.util.regex包提供的接口和类来实现的。`regex-smart.jar`这个库显然是为了简化开发者在...

    java正则表达式验证

    java使用正则表达式进行校验验证,主要使用了Pattern和Matcher类,直接main方法运行就可以,亲测有效

    Java 正则表达式 图片版

    Java正则表达式 Java 正则表达式 图片版 携带方便,查阅方便!~

    Java正则表达式应用总结

    Java正则表达式是编程语言Java中用于处理字符串和文本的强大工具。它允许开发者通过模式匹配来执行复杂的文本分析和操作。在Java中,正则表达式的操作主要涉及两个核心类:`java.util.regex.Matcher`和`java.util....

    java正则表达式使用例子

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许我们通过模式匹配来查找、替换或分割文本。在Android开发中,正则表达式尤其重要,因为它们可以帮助我们验证用户输入、处理文本数据或者进行复杂的...

    Java正则表达式_动力节点Java学院整理

    Java正则表达式详解 Java正则表达式是Java语言中的一种模式匹配技术,用于匹配、查找、替换和判断字符串。它是一种强大的工具,能够帮助开发者快速处理字符串相关的任务。 什么是正则表达式? 正则表达式是一种...

    常用正则表达式HTML,JAVA合集

    Java提供了`java.util.regex`包,通过`Pattern`和`Matcher`类支持正则表达式。以下是如何在Java中验证电话号码的一个例子: ```java import java.util.regex.Pattern; import java.util.regex.Matcher; String...

    使用Java正则表达式实现一个简单的身份证号码验证

    ### 使用Java正则表达式实现一个简单的身份证号码验证 #### 一、背景介绍 身份证号码是中国公民的身份标识,由15位或18位数字组成(早期为15位,后改为18位)。其中,第18位是校验码,可能是数字0~9或者大写字母X。...

    Java正则表达式介绍和练习

    Java正则表达式介绍和练习Java正则表达式介绍和练习Java正则表达式介绍和练习

    Java正则表达式详细讲解

    Java正则表达式是Java编程语言中用于处理字符串的强大工具,它允许程序员通过模式匹配来查找、替换或分割文本。在Java中,正则表达式是通过`java.util.regex`包提供的API来实现的。本讲解将深入探讨Java正则表达式的...

    Java正则表达式测试工具

    Java正则表达式测试工具是面向开发者和爱好者的一款实用程序,它可以帮助用户验证和调试他们的正则表达式。在Java编程环境中,正则表达式是一个强大的字符串处理工具,广泛用于数据验证、文本搜索和替换等任务。这款...

Global site tag (gtag.js) - Google Analytics