0

我有一个 html 文件列表。每个文件都有重复的字符串onClick="rpd(SOME_NUMBER)"。我知道如何从 html 文件中获取内容,我想做的是获取 "SOME_NUMBER" 的列表。我看到我可能需要做一个 preg_match,但我在正则表达式方面很糟糕。我试过了

$file_content = file_get_contents($url);    
$pattern= 'onClick="rpd(#);"';
preg_match($pattern, $file_content);

正如你可以想象的......它没有工作。完成这项工作的最佳方法是什么?谢谢!

4

5 回答 5

1

也许是这样的?

preg_match('/onClick="rpd\((\d+)\);"/', $file_content,$matches);
print $matches[1];
于 2013-10-20T15:15:00.303 回答
1

这应该完成它:

    $file_content ='234=fdf donClick="rpd(5);"as23 f2 onClick="rpd(7);" dff fonClick="rpd(8);"';    
    $pattern= '/onClick="rpd\((\d+)\);"/';

    preg_match_all($pattern, $file_content,$matches);
    var_dump($matches);

输出是这样的:

    数组(大小=2)
    0 =>
    数组(大小=3)
      0 => 字符串 'onClick="rpd(5);"' (长度=17)
      1 => 字符串 'onClick="rpd(7);"' (长度=17)
      2 => 字符串 'onClick="rpd(8);"' (长度=17)
    1 =>
    数组(大小=3)
      0 => 字符串“5”(长度=1)
      1 => 字符串“7”(长度=1)
      2 => 字符串“8”(长度=1)

于 2013-10-20T15:22:32.210 回答
0

我不知道 PHP,但匹配的正则表达式是:

'onClick="rpd\(([0-9]+)\)"'

请注意,由于它们的特殊含义,我们需要转义这些括号\,并且我们用一个常规括号包围我们的匹配项以分隔数字。

如果preg_match还支持前瞻/后瞻表达式:

 '(?<=onClick="rpd\()[0-9]+(?=\)")'

也将工作。

于 2013-10-20T15:14:50.230 回答
0

一个干净的方法是使用 DOMDocument 和 XPath:

$doc = new DOMDocument();
@$doc->loadHTMLFile($url);
$xpath = new DOMXPath($doc);
$ress= $xpath->query("//*[contains(@onclick,'rpd(')]/attribute::onclick");
foreach ($ress as $res) {
    echo substr($res->value,4,-1) . "\n";    
}
于 2013-10-20T16:19:44.630 回答
0
$file_content='blah blah onClick="rpd(56)"; blah blah\nblah blah onClick="rpd(43)"; blah blah\nblah blah onClick="rpd(11)"; blah blah\n';
$pattern= '/onClick="rpd\((\d+)\)";/';
preg_match_all($pattern, $file_content, $matches);
print_r($matches);

输出:

Array
(
    [0] => Array
        (
            [0] => onClick="rpd(56)";
            [1] => onClick="rpd(43)";
            [2] => onClick="rpd(11)";
        )

    [1] => Array
        (
            [0] => 56
            [1] => 43
            [2] => 11
        )

)

你可以在这里玩我的例子:http: //ideone.com/TzShPG

于 2013-10-20T15:27:11.830 回答