我正在使用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);
答案 0 :(得分:5)
不要试图重现精确的空白序列(由于行结尾可能很难甚至不可能),只需使用\s*
来表示“任何数字(包括零)的空白字符” - 这包括空格,制表符,换行符,回车符......这就是你需要的。
答案 1 :(得分:1)
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
)
)