zoukankan      html  css  js  c++  java
  • java 捕获组与非捕获组

    非捕获组:格式:(?:xxxx), 如:(?:aaa)\w+(bbb)\1,\1 代表重复捕获的第一组即是(bbb) 

    public static void main(String[] args)
    {
    String str = "fooccccbarbarbarfo";
    Pattern p = Pattern.compile("(?:foo)\w+(bar)\1\1");
    Matcher m =p.matcher(str);
    if (m.find())
    {
    System.out.println(m.group());
    System.out.println(m.group(1));
    }
    }

    输出:

    fooccccbarbarbar
    bar

    捕获组:格式:(xxx), 如:(aaa)\w+(bbb)\1,\1 代表重复捕获的第一组即是(aaa) ,\2代表(bbb)

    public static void main(String[] args)
    {
    String str = "fooccccbarbarbarfo";
    Pattern p = Pattern.compile("(foo)\w+(bar)\2\2");
    Matcher m =p.matcher(str);
    if (m.find())
    {
    System.out.println(m.group());
    System.out.println(m.group(1));
    }
    }

    输出:

    fooccccbarbarbar
    foo

    贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。非贪婪模式只被部分NFA引擎所支持。 

    属于贪婪模式的量词,也叫做匹配优先量词,包括: 

    “{m,n}”、“{m,}”、“?”、“*”和“+”。 

    在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: 

    “{m,n}?”、“{m,}?”、“??”、“*?”和“+?”。 

    从正则语法的角度来讲,被匹配优先量词修饰的子表达式使用的就是贪婪模式,如“(Expression)+”;被忽略优先量词修饰的子表达式使用的就是非贪婪模式,如“(Expression)+?”。 

    对于贪婪模式,各种文档的叫法基本一致,但是对于非贪婪模式,有的叫懒惰模式或惰性模式,有的叫勉强模式,其实叫什么无所谓,只要掌握原理和用法,能够运用自如也就是了。个人习惯使用贪婪与非贪婪的叫法,所以文中都会使用这种叫法进行介绍。

  • 相关阅读:
    JMeter笔记:关于时间函数_time的简单使用(时间戳、时间)
    搜索&分页功能主要测试点
    JMeter笔记十五:逻辑控制器之临界部分控制器(Critical Section Controller)
    JMeter笔记十四:Beanshell取样器
    Python3+RobotFramework自动化测试十:接口测试
    Github Pages中的Octopress框架搭建个人博客(下)
    pycharm破解
    计算机网络 UDP协议
    计算机网络 路由器协议
    计算机网络 TCP协议
  • 原文地址:https://www.cnblogs.com/daxiong225/p/8663819.html
Copyright © 2011-2022 走看看