- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Regex {
- public static void main(String[] args) {
- //先行断言 //去掉以ing结尾的单词的ing
- String str4="cooking singing ing ing";
- Pattern pattern = Pattern.compile("[a-z]*(?=ing)");//从右向左找,[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("-------------");
- //后发断言
- String str5="abcdefg abcd";
- Pattern pattern1 = Pattern.compile("(?<=abc)[a-z]*");//去掉以abc开头的单词的abc
- 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+"#");
- }
- }
- }
复制代码 |