zoukankan      html  css  js  c++  java
  • 反向引用 /1, /2...

    表达式在匹配时,表达式引擎会将小括号 "( )" 包含的表达式所匹配到的字符串记录下来。在获取匹配结果的时候,小括号包含的表达式所匹配到的字符串可以单独获取。这一点,在前面的举例中,已经多次展示了。在实际应用场合中,当用某种边界来查找,而所要获取的内容又不包含边界时,必须使用小括号来指定所要的范围。比如前面的 "<td>(.*?)</td>"。

    其实,"小括号包含的表达式所匹配到的字符串" 不仅是在匹配结束后才可以使用,在匹配过程中也可以使用。表达式后边的部分,可以引用前面 "括号内的子匹配已经匹配到的字符串"。引用方法是"/" 加上一个数字。"/1" 引用第 1 对括号内匹配到的字符串,"/2" 引用第 2 对括号内匹配到的字符串……以此类推,如果一对括号内包含另一对括号,则外层的括号先排序号。换句话说,哪一对的左括号"(" 在前,那这一对就先排序号。

    举例如下:

    举例 1:

    表达式 "('|")(.*?)(/1)" 在匹配 " 'Hello', "World" " 时,匹配结果是:成功;匹配到的内容是:" 'Hello' "。再次匹配下一个时,可以匹配到 " "World" "。

    举例 2:

    表达式 "(/w)/1{4,}" 在匹配 "aa bbbb abcdefg ccccc111121111 999999999" 时,匹配结果是:成功;匹配到的内容是"ccccc"。再次匹配下一个时,将得到 999999999。这个表达式要求"/w" 范围的字符至少重复 5 次,注意与 "/w{5,}" 之间的区别。

    举例 3:

    表达式 "<(/w+)/s*(/w+(=('|").*?/4)?/s*)*>.*?<//1>" 在匹配"<td id='td1' style="bgcolor:white"></td>" 时,匹配结果是成功。如果"<td>" 与 "</td>" 不配对,则会匹配失败;如果改成其他配对,也可以匹配成功。

    每接触一个新领域,我就像一块掉进水里的海绵,四面八方的养分都让我不断充实。O(∩_∩)O~
  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/zhzcode/p/9782956.html
Copyright © 2011-2022 走看看