php程序:
$patterns[0]=<<<EOT2
/<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)book_num(?(Quote)\k<Quote>)["']?[^>]*>((?<Nested><\k<HtmlTag>[^>]*>)|<\/\k<HtmlTag>>(?<-Nested>)|.*?)*<\/\k<HtmlTag>><a id="bookcase"[\s\S]+?<\/span>/si
EOT2;$replacements[0]=""; print preg_replace($patterns, $replacements, $text); ————————————————————————————————————————————Warning: preg_replace() [function.preg-replace]: Compilation failed: unrecognized character after (?< at offset 136 in D:\wamp\www\ttt\test.php on line 117
这是为什么?

解决方案 »

  1.   

    php不支持正则平衡组。
    你不能用类似/(?<groupname>somethinghere)/这样的正则式。
      

  2.   


    手册上那里有写吗?  好像找不到, php里对正则的支持如何程度, 它让我一直在黑暗中摸索, 请指教.
      

  3.   

    这个还真没去总结下,就是看到有趣的正则式就套到php来试一下。
    http://php.net/manual/en/reference.pcre.pattern.syntax.php
    手册pcre语法其实有,有一些我自认为很有趣的正则式.
    比如
    1.once-only subpatterns
    2.conditional subpatterns
    3.recursive patterns
      

  4.   

    错误太多了找不完。
    $patterns[0]= < < <EOT2  明显是中文的小于号
      

  5.   

    php不支持正则平衡组。 
    你不能用类似/(? <groupname>somethinghere)/这样的正则式。
    ------------------------------------------------------------
    这个表达式也不支持。 .*?
    <span class="pd_buy_num_unit">.*?</span>
      

  6.   

    $text是这个网页源码http://product.dangdang.com/product.aspx?product_id=20546473singleline=true参考的这个网页,查找特定ID的HTML标签,成对查找。PHP好像不支持这个正则表达式,现在改成查找字符串,截取字符串了。
    http://www.imkevinyang.com/2009/07/%E4%BD%BF%E7%94%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8C%B9%E9%85%8D%E5%B5%8C%E5%A5%97html%E6%A0%87%E7%AD%BE.html