A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 旭辉lin 中级黑马   /  2014-8-31 10:52  /  888 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 旭辉lin 于 2014-8-31 14:28 编辑

先行断言 后发断言 负向零宽断言,具体怎么用,区别在那儿?

3 个回复

倒序浏览
网上一搜就有详细的解释,也有例子,去看看吧
回复 使用道具 举报 1 0
过路过路
回复 使用道具 举报

  1. import java.util.regex.Matcher;
  2. import java.util.regex.Pattern;

  3. public class Regex {

  4.         public static void main(String[] args) {

  5.                 //先行断言 //去掉以ing结尾的单词的ing
  6.                 String str4="cooking singing ing ing";
  7.                 Pattern pattern = Pattern.compile("[a-z]*(?=ing)");//从右向左找,[a-z]*代表匹配范围,?=ing代表匹配条件
  8.                 Matcher matcher = pattern.matcher(str4);
  9.                 //matcher.find();
  10.                 while(matcher.find()){//总共找了6次
  11.                         String aa = matcher.group();
  12.                         System.out.println(aa+"#");
  13.                 }//找到了匹配条件就置为空字符串,然后在原来的位置再找,捕获符合条件的表达式,没有符合的表达式,就在下一个范围找
  14.                 //找到了ing,然后ing置为空,接着还是在原来的位置找,找到了sing,
  15.                 //同理在cooking中找,找到了ing置为空字符串,接着还是在原来的位置找,找到了cook
  16.                
  17. /*结果:                cook#
  18.                         #
  19.                         sing#
  20.                         #
  21.                         #
  22.                         #
  23. */
  24.                 System.out.println("-------------");
  25.                 //后发断言
  26.                 String str5="abcdefg abcd";
  27.                 Pattern pattern1 = Pattern.compile("(?<=abc)[a-z]*");//去掉以abc开头的单词的abc
  28.                 Matcher matcher1 = pattern1.matcher(str5);
  29.                 while(matcher1.find()){
  30.                         String aa = matcher1.group();
  31.                         System.out.print("#"+aa);
  32.                 }
  33.                
  34.                 System.out.println();
  35.                 System.out.println("-------------");
  36.                
  37.                
  38.                 //负向零宽后发断言(?<!表达式) 后写条件
  39.                 //负向零宽先行断言 (?!表达式) 先写条件后写范围

  40.                 //负向零宽断言要注意的跟正向的一样 (即条件在前还是在后)
  41.                 String str6="52305668";
  42.                 Pattern pattern2 = Pattern.compile("^(\\d(?<!7))+$");//数中不能包含7

  43.                 //Pattern pattern2 = Pattern.compile("^\\d{7}(?!8)\\d$");
  44.                 //排除尾号是8的数 (?!8)代表匹配条件 后面的\\d代表范围

  45.                 //Pattern pattern2 = Pattern.compile("^\\d(?<!1)\\d{7}$");
  46.                 //排除头是1的数 前面的\\d代表范围  (?<!1)代表匹配条件

  47.                 Matcher matcher2 = pattern2.matcher(str6);
  48.                 //System.out.println(matcher2.matches());
  49.                 while(matcher2.find()){
  50.                         String aa = matcher2.group();
  51.                         System.out.print(aa+"#");
  52.                 }
  53.         }

  54. }

复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马