php使用preg_match_all查找具有style属性的所有元素

时间:2011-04-10 21:03:05

标签: php html coding-style preg-match-all

我只想在html文档中找到带有preg_match_all的所有元素。阅读文件后,我使用以下内容:

preg_match_all('<.*style=?.*>',$file,$patterns);
print_r( $patterns[0] ); die;

在&lt;之前提供所有元素但是有间距和其他东西。和&gt;。此外,输出在结果中有一个结束标记(例如:')。我玩弄preg表达式,但让我疯了。有人可以告诉我使用什么语法是正确的吗?

输出现在是:

Array
(
    [0] => <table style="position:absolute;width:100%;height:100%;">
    [1] =>  <div class="_barcode_pdf417" style="margin:0 auto;width:176px;height:132px;background:#FFF;color:#000;"><div style="margin:0 auto;margin:0;padding:0;border:0">
    [2] =>      <div style="position:absolute;width:14px;height:128px;background:#000;"></div>
    [3] =>      <div style="position:absolute;margin-left:18px;width:2px;height:128px;background:#000;"></div>
    [4] =>      <div style="position:absolute;margin-left:22px;width:2px;height:128px;background:#000;"></div>
    [5] =>      <div style="position:absolute;margin-left:26px;width:2px;height:128px;background:#000;"></div>
........
........
........

但我想:

Array
(
    [0] => <table style="position:absolute;width:100%;height:100%;">
    [1] => <div class="_barcode_pdf417" style="margin:0 auto;width:176px;height:132px;background:#FFF;color:#000;">
<div style="margin:0 auto;margin:0;padding:0;border:0">
    [2] => <div style="position:absolute;width:14px;height:128px;background:#000;">
    [3] => <div style="position:absolute;margin-left:18px;width:2px;height:128px;background:#000;">
    [4] => <div style="position:absolute;margin-left:22px;width:2px;height:128px;background:#000;">
    [5] => <div style="position:absolute;margin-left:26px;width:2px;height:128px;background:#000;">
......
......

感谢您的回答!亲切的问候。

2 个答案:

答案 0 :(得分:1)

$html = <<< EOF
[0] => <table style="position:absolute;width:100%;height:100%;">
[1] =>  <div class="_barcode_pdf417" style="margin:0 auto;width:176px;height:132px;background:#FFF;color:#000;"><div style="margin:0 auto;margin:0;padding:0;border:0">
[2] =>      <div style="position:absolute;width:14px;height:128px;background:#000;"></div>
[3] =>      <div style="position:absolute;margin-left:18px;width:2px;height:128px;background:#000;"></div>
[4] =>      <div style="position:absolute;margin-left:22px;width:2px;height:128px;background:#000;"></div>
[5] =>      <div style="position:absolute;margin-left:26px;width:2px;height:128px;background:#000;"></div>
........
........
........"
EOF;


preg_match_all('/([<div|<table]+.*?style.*?>)/i', $html, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
echo   $result[1][$i];
}

将输出:

<table style="position:absolute;width:100%;height:100%;">
<div class="_barcode_pdf417" style="margin:0 auto;width:176px;height:132px;background:#FFF;color:#000;">
<div style="margin:0 auto;margin:0;padding:0;border:0">
<div style="position:absolute;width:14px;height:128px;background:#000;">
<div style="position:absolute;margin-left:18px;width:2px;height:128px;background:#000;">
<div style="position:absolute;margin-left:22px;width:2px;height:128px;background:#000;">
<div style="position:absolute;margin-left:26px;width:2px;height:128px;background:#000;">

但是,最好的选择是使用html dom parser

答案 1 :(得分:0)

我强烈建议不要以这种方式使用正则表达式来操作(X)HTML,因为PHP以DOMDocument扩展的形式为作业提供了更高级别的API。您可以使用它来迭代有效的DOm结构并查找具有特定属性的元素。操作非常类似于Javascript DOM操作,具有诸如GetElementById,GetElementByClassName等功能,您可以使用它们。

您可以使用它来迭代主体的子元素(及其递归子元素)来查找定义了样式的元素。