正则表达式学习笔记:贪婪、惰性和支配量词
来源:优易学  2009-1-12 11:54:01   【优易学:中国教育考试门户网】   资料下载   IT书店
文章页内部300*250广告位
 贪婪量词:
  先看整个字符串是不是一个匹配。如果没有发现匹配,它去掉最后字符串中的最后一个字符,并再次尝试。如果还是没有发现匹配,那么 再次去掉最后一个字符串,这个过程会一直重复直到发现一个匹配或者字符串不剩任何字符。简单量词都是贪婪量词。
  惰性量词:
  先看字符串中的第一个字母是不是一个匹配,如果单独着一个字符还不够,就读入下一个字符,组成两个字符的字符串。如果还没有发现匹配,惰性量词继续从字符串中添加字符直到发现一个匹配或者整个字符串都检查过也没有匹配。惰性量词和贪婪量词的工作方式恰好相反。
  支配量词:
  只尝试匹配整个字符串。如果整个字符串不能产生匹配,不做进一步尝试。
  贪婪量词 惰性量词 支配量词 描述
  -------------------------------------------------------------------------------------
  ? ?? ?+ 可以出现0次或1次,但至多出现1次
  * *? *+ 可以出现任意次,也可以不出现
  + +? ++ 出现1次或多次,但至少出现1次
  {n} {n}? {n}+ 一定出现n次
  {n,m} {n,m}? {n,m}+ 至少出现n次,但至多不能超过m次
  {n,} {n,}? {n,}+ 可以出现任意次,但至少出现n次
  例如:我们要从字符串abbbaabbbaaabbb1234中获得abbb,aabbb,aaabbb的匹配
  1、贪婪量词
  1 var regexp = /.*bbb/g;
  2 var a = str.match(regexp);
  3 alert(a.length); //output:1
  4 alert(a[0]); //output:abbbaabbbaaabbb
  贪婪量词的工作过程可以这样表示:
  a)abbbaabbbaaabbb1234
  b)abbbaabbbaaabbb123
  c)abbbaabbbaaabbb12
  d)abbbaabbbaaabbb1
  e)abbbaabbbaaabbb //true
  可以看到,贪婪量词在取得一次匹配后就会停止工作,虽然我们加了’g’(全局匹配)
  2、惰性量词
  1 var regexp = /.*?bbb/g;
  2 var a = str.match(regexp);
  3 alert(a.length); //output:3
  4 alert(a[0]); //output:abbb
  5 alert(a[1]); //output:aabbb
  6 alert(a[2]); //output:aaabbb
  惰性量词的工作过程可以这样表示:
  a)a
  b)ab
  c)abb
  d)abbb //保存结果,并从下一个位置重新开始
  e)a
  f)aa
  g)aab
  h)aabb
  j)aabbb //保存结果,并从下一个位置重新开始
  e)a
  e)aa
  e)aaa
  e)aaab
  e)aaabb
  e)aaabbb //保存结果,并从下一个位置重新开始
  由于JS是不支持支配量词的,所以支配量词我们只能用JAVA来演示:
  1 String string = "abbbaabbbaaabbb1234";
  2 Pattern p = Pattern.compile(".*+bbb");
  3 Matcher m = p.matcher(string);
  4 System.out.println(m.find()); //output:false
  5
  因为支配量词采用一刀切的匹配方式,如:
  a)abbbaabbbaaabbb1234 //false

责任编辑:小草

收藏此页】【 】【打印】【回到顶部
等级考试课程列表页595*300
文章搜索:
 相关文章
计算机底部580*90广告
文章页右侧第一330*280广告
计算机文章页资讯推荐
热点资讯
文章页330尺寸谷歌广告位
资讯快报
热门课程培训