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正则表达式Java正则表达式Java正则表达式Java正则表达式
本文写作时,一个包含了用正则表达式进行文本处理的Java规范需求(Specification Request)已经得到认可,你可以期待在JDK的下一版本中看到它。 然而,如果现在就需要使用正则表达式,又该怎么办呢?你可以从Apache...
java,正则表达式,详解,java正则表达式,PDF
java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式java正则表达式
正则表达式之道.doc 正则表达式中的特殊字符.doc Java正则表达式详解.doc 正则表达式.ppt JAVA正则表达式--Pattern和Matcher.doc 例子
java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解
JAVA正则表达式JAVA正则表达式JAVA正则表达式
java使用正则表达式进行校验验证,主要使用了Pattern和Matcher类,直接main方法运行就可以,亲测有效
Java正则表达式 Java 正则表达式 图片版 携带方便,查阅方便!~
java 正则表达式 java 正则表达式 java 正则表达式java 正则表达式java 正则表达式
java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解java正则表达式详解
java正则表达式.pdfjava正则表达式.pdfjava正则表达式.pdfjava正则表达式.pdfjava正则表达式.pdf
Java正则表达式介绍和练习Java正则表达式介绍和练习Java正则表达式介绍和练习
JAVA正则表达式应用:任意输入一串字符串 如何输入exit退出程序;从输入的字符串中判断是否包含手机号码 正则表达式可以使用" +86| 86 1 d{10}" 如果包含请将其在控制台打印出来 否则输出不包含字符串 ...
正则表达式的使用 java正则表达式的使用示例 java正则表达式
java实现用正则表达式的方法提取html中的信息,可以提取标题,正文,链接等。经过运行,没问题的
Java正则表达式应用总结
正则表达式匹配工具很好很强大 放心使用 内附各种经典正则匹配公式
Java正则表达式入门介绍.ppt,介绍常用语法规则及使用方式等
java正则表达式验证IP地址