java 零宽断言
来源:互联网 发布:淘宝满减券漏洞 编辑:程序博客网 时间:2024/05/01 19:03
常用分组语法
分类
代码/语法
说明
捕获
(exp)
匹配exp,并捕获文本到自动命名的组里
(?<name>exp)
匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp)
匹配exp,不捕获匹配的文本,也不给此分组分配组号
零宽断言
(?=exp)
匹配exp前面的位置
(?<=exp)
匹配exp后面的位置
(?!exp)
匹配后面跟的不是exp的位置
(?<!exp)
匹配前面不是exp的位置
注释
(?#comment)
这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读
零宽断言又分四种:
先行断言 也叫零宽度正预测先行断言(?=exp) -- 表示匹配表达式前面的位置
例如 [a-z]*(?=ing) 可以匹配 cooking 和 singing 中的 cook 与 sing
后发断言 也叫零宽度正回顾后发断言(?<=exp) -- 表示匹配表达式后面的位置
例如(?<=abc).* 可以匹配 abcdefg 中的 defg
负向零宽断言
负向零宽断言 (?!exp) 也是匹配一个零宽度的位置,不过这个位置的“断言”取表达式的反值,例如 (?!exp) 表示 "exp" 前面的位置,如果 "exp" 不成立 ,匹配这个位置;如果 "exp" 成立,则不匹配。同样,负向零宽断言也有“先行”和“后发”两种,负向零宽后发断言为 (?<!exp)
负向零宽后发断言(?<!exp)
负向零宽先行断言 (?!exp)
负向零宽断言要注意的跟正向的一样。
import java.util.regex.Matcher;import java.util.regex.Pattern;public class Regex {public static void main(String[] args) {//先行断言 //去掉以ing结尾的单词的ingString str4="cooking singing ing ing";//从右向左找,[a-z]*代表匹配范围,?=ing代表匹配条件Pattern pattern = Pattern.compile("[a-z]*(?=ing)");Matcher matcher = pattern.matcher(str4);//matcher.find();while(matcher.find()){//总共找了6次String aa = matcher.group();System.out.println(aa+"#");}//找到了匹配条件就置为空字符串,然后在原来的位置再找,捕获符合条件的表达式,//没有符合的表达式,就在下一个范围找//找到了ing,然后ing置为空,接着还是在原来的位置找,找到了sing,//同理在cooking中找,找到了ing置为空字符串,接着还是在原来的位置找,找到了cook/*结果:cook##sing####*/System.out.println("-------------");//后发断言 //去掉以abc开头的单词的abcString str5="abcdefg abcd";Pattern pattern1 = Pattern.compile("(?<=abc)[a-z]*");Matcher matcher1 = pattern1.matcher(str5);while(matcher1.find()){String aa = matcher1.group();System.out.print("#"+aa);}System.out.println();System.out.println("-------------");//负向零宽后发断言(?<!表达式) 后写条件//负向零宽先行断言 (?!表达式) 先写条件后写范围//负向零宽断言要注意的跟正向的一样 (即条件在前还是在后)String str6="52305668";Pattern pattern2 = Pattern.compile("^(\\d(?<!7))+$");//数中不能包含7//Pattern pattern2 = Pattern.compile("^\\d{7}(?!8)\\d$");//排除尾号是8的数 (?!8)代表匹配条件 后面的\\d代表范围//Pattern pattern2 = Pattern.compile("^\\d(?<!1)\\d{7}$");//排除头是1的数 前面的\\d代表范围 (?<!1)代表匹配条件Matcher matcher2 = pattern2.matcher(str6);//System.out.println(matcher2.matches());while(matcher2.find()){String aa = matcher2.group();System.out.print(aa+"#");}}}
0 0
- java 零宽断言
- Java正则零宽断言
- Java正则零宽断言
- java 零宽度断言
- 零宽断言
- 正则零宽断言
- [转]零宽断言
- [转]零宽断言
- 零宽断言
- 正则:零宽断言和负向零宽断言
- 正则表达式--零宽断言
- 负向零宽断言
- 正则表达式--零宽断言
- 正则表达式零宽断言
- 正则表达式-零宽断言
- 正则表达式零宽断言
- 正则表达式-零宽断言
- (?=exp) (?<=exp) 零宽先行断言 零宽后行断言
- C#重命名文件名
- 巧用dimens适配多个分辨率
- 我的多年编程经验总结(转)
- cocos2dx shader -- Vol.1(灰度、流光、百叶窗)
- Qt布局管理器的使用(一)
- java 零宽断言
- uva 10905(排序)
- Android 几个重要的英文单词
- C#格式化字符串
- 专访《迷你西游》江涛 用不断的创新点来留住玩家
- 关于《Proofs from THE BOOK》chapter22 单调序列问题
- 基于UIScrollView和UIPageControl控件做的用户引导界面
- ANSI和Unicode字符集
- 走进企业级批处理框架--Springbatch