使用preg_match时忽略空白


Ignore whitespace when using preg_match

我正在使用preg_match尝试捕获此html结构中的"Data",但目前它没有返回任何内容,我认为这可能是因为空白?

只是想知道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);

不要试图重现空白的确切序列(由于行尾的原因,这可能很难,甚至不可能),只需使用's*来指示"任何数量(包括零)的空白字符"-这包括空格、制表符、换行符、回车符。。。这正是你在这里需要的。

抱歉,之前没有测试。''s*给了你0到无穷大的可能空间,所以这就是你的解。

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

经过测试。它现在工作:)

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

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

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

使用s修饰符

阅读更多关于修改器修改器

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
        )
)