PHP正则表达式不起作用

时间:2012-06-03 11:59:53

标签: php regex

我正在尝试从html文件中获取这些匹配项。它有几个关于它们的陈述:

links(6)  = "chicas-con-juguetes.asp"

我试图用这个函数提取它们:

    public static function extract_all_vid_links($html){
    $pattern="links([0-9])  = \"(.*).asp\"";
    preg_match_all( "/$pattern/i", $html ,$out, PREG_SET_ORDER);

    print_r($out);
    //    foreach($out as $values){
    //       echo $values[0]."<br/>";
    //   }
}

但它不起作用!?!?为什么呢?

改性:

    $pattern="links\([0-9]\)  = \"(.*).asp\"";
    preg_match_all( "/$pattern/i", $html ,$out, PREG_SET_ORDER);

仍然无效。

2 个答案:

答案 0 :(得分:2)

如果您不想创建新的匹配组,则需要转义()个字符,请查看此处:links\(\d\)

这确实解决了您所描述的问题(因此您的说明可能不对):

<?php
header('Content-Type: text/plain;');


$html = 'links(6)  = "chicas-con-juguetes.asp"';

$pattern="links\(\d\)  = \"(.*).asp\"";
$r = preg_match_all( "/$pattern/i", $html ,$matches);

var_dump($r, $matches);

Demo,输出:

int(1)
array(2) {
  [0]=>
  array(1) {
    [0]=>
    string(37) "links(6)  = "chicas-con-juguetes.asp""
  }
  [1]=>
  array(1) {
    [0]=>
    string(19) "chicas-con-juguetes"
  }
}

答案 1 :(得分:1)

preg_match_all('/links\([0-9]+\)  = \"([^\.]*?).asp\"/i', $html, $out, PREG_SET_ORDER);

您需要转义()个字符。另外,我在+之后添加了[0-9],以便9以上的数字也可以使用。

相关问题