zoukankan      html  css  js  c++  java
  • 正则表达式 捕获组,向前引用,零宽度断言,贪婪量词,惰性量词以及支配量词

    原来写过一篇正则表达式的文章
    http://hi.baidu.com/kabike/item/305cb3e591bbf4b52f140ba7
    后来又读了一遍《精通正则表达式》,感觉有了新的认识.

    捕获组
    正则表达式中的括号相当于一个分组,比如下面这个正则表达式,就把字符串分成了"_"分割的三个分组,
    然后可以利用$1引用第一个分组,$3引用第三个分组
    Java代码 复制代码 收藏代码
    1. Pattern p = Pattern.compile("([^_]+)_(\\d+)_([^_]+)");   
    2. String src1 = "孙燕姿_20091103_遇见.mp3";   
    3. Matcher m = p.matcher(src1);   
    4. System.out.println(m.replaceAll("$1_$3"));   
    5. //output 孙燕姿_遇见.mp3  


    向前引用
    假设想匹配字符串中的"hello hello"这样的字串是很容易的,但是想匹配所有的这样的重复字符串呢(比如 "aaa aaa"和"www www")?
    可以利用向前引用,即寻找已经匹配的捕获组.
    比如下面这个正则表达式,寻找这样的匹配模式:多个字母(形成了捕获组1),一个空格,捕获组1
    Java代码 复制代码 收藏代码
    1. Pattern p = Pattern.compile("(\\w+)\\s\\1");   
    2. String src = "I always make make some mistakes when when writting.";   
    3. Matcher m = p.matcher(src);   
    4. while (m.find()) {   
    5.     System.out.println(m.group());   
    6. }   
    7. //output make make   
    8.          when when  


  • 相关阅读:
    表达式执行工具方法
    Mysql表创建外键报错
    JVM打印加载类的详情信息
    Shell脚本查询进程存活信息
    旋转数组的最小数字
    斐波那契数列(水题)
    用两个栈实现队列
    变态跳台阶
    跳台阶
    9*9乘法表(5种输出格式)
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3575991.html
Copyright © 2011-2022 走看看