Java正则表达式中的特殊构造

来源:互联网 发布:淘宝官方网址是多少 编辑:程序博客网 时间:2024/06/06 14:12

1、零宽断言

零宽即为不占用字符位置,用于表示字符之间的空隙。该空隙需要满足一定条件。

检测空隙之前的匹配条件为前向、后行、回顾断言(lookbehind assertion)。

检测空隙之后的匹配条件为后向、先行、前瞻断言(lookahead assertion)。

零宽断言要求所检测的匹配条件成立、存在时,称为正向、肯定性断言

零宽断言要求所检测的匹配条件不成立、不存在时,称为负向、否定性断言

注意:黑体为标准术语,其他的修饰词仅用于帮助理解,不建议使用,这是由一小撮英语不好的码农自创的术语。

(?=X) 肯定性前瞻断言

(?!X) 否定向前瞻断言

(?<=X) 肯定性回顾断言

(?<!X) 否定性回顾断言

零宽断言之后也可以加量词限定,表示零个至多个

2、非捕获组

捕获组是指被保存起来的子表达式、子模式、可以在正则表达式中用\i引用的第i个捕获子串、可以在replaceAll等函数中用$i引用的第i个捕获子串、

可以用matcher对象的group(i)方法调用的第i个捕获子串。即"abc(de.?)fg"中的(de.?)。

非捕获组就是也作为一个整体,但是不被捕获,不能用上述方法引用。

一般而言,在不需要使用的情况下,应该避免捕获组。

(?:X) X作为一个整体,但不被捕获,不能被用于前向引用。

(?>X) X作为一个原子的、不可回溯的、占有型整体,但不被捕获。

3、用例

判断一个字符串中包含this,不包含that。

("^(?:(?!that).)*?this(?:(?!that).)*$")

需要测试"thathis"、"thisthat"。

0 0
原创粉丝点击