2

我正在preg_match尝试在这个 html 结构中捕获“数据”,但目前它没有返回任何内容,我认为这可能是因为空格?

只是想知道其中有什么问题preg_match

html

  <td><strong>Title</strong></td>

                    <td>Data</td>

php

preg_match("~<td><strong>Title</strong></td>

                    <td>([a-zA-Z0-9 -_]+)</td>~", $html, $match);
4

4 回答 4

5

与其尝试重现空格的确切顺序(由于行结尾,这可能很难甚至不可能),只需使用\s*来表示“任意数量(包括零)的空格字符” - 这包括空格、制表符、换行符、回车符...正是您需要的。

于 2012-08-05T15:24:18.520 回答
1

抱歉,之前没有测试过。\s* 为您提供 0 到无限可能的空间,因此这是您的解决方案。

preg_match("/<td><strong>Title<\/strong><\/td>\s*<td>([a-zA-Z0-9 -_]+)<\/td>/",
           $html, $match)

测试了它。它现在可以工作了:)

于 2012-08-05T15:15:14.390 回答
0

使用 s 修饰符

阅读有关 modifires 的更多信息

preg_match_all('/<td><strong>Title<\/strong><\/td>.*<td>(.*)<\/td>/iUs',$cnt,$preg);
print_r($preg);

输出:

Array
(
    [0] => Array
        (
            [0] => <td><strong>Title</strong></td>

                    <td>Data</td>
        )

    [1] => Array
        (
            [0] => Data
        )

)
于 2014-09-07T19:47:26.427 回答
0

如果你想从 html 文件中获取数据,xml 解析器会好很多。

无论如何,除非您指定修饰符 m (您也可以为点 (.) 指定修饰符 s 以匹配新行),否则您的正则表达式不会匹配多于一行的任何内容。

http://php.net/manual/en/reference.pcre.pattern.modifiers.php

于 2012-08-05T15:15:46.107 回答