使用preg_match时忽略空格

时间:2012-08-05 15:09:04

标签: php

我正在使用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 个答案:

答案 0 :(得分:5)

不要试图重现精确的空白序列(由于行结尾可能很难甚至不可能),只需使用\s*来表示“任何数字(包括零)的空白字符” - 这包括空格,制表符,换行符,回车符......这就是你需要的。

答案 1 :(得分:1)

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

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

测试出来。它现在有效:)

答案 2 :(得分:0)

如果你想从html文件中获取数据,那么xml解析器可以更好。

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

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

答案 3 :(得分:0)

使用s修饰符

详细了解modifires Modifiers

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
        )

)