用preg_match提取一些html

时间:2012-09-07 14:01:45

标签: php html arrays preg-match extract

我使用preg_mach来提取一些html(我尝试使用DOMDocument,但我对新行有一些问题) 无论如何......那是我的代码..

1.HTML

<body>


            <!-- icon and title -->
            <div class="smallfont">
                <img class="inlineimg" src="images/icons/icon1.gif" alt="" border="0" />
                <strong>qrtoobah 3nwan</strong>
            </div>
            <hr size="1" style="color:#CCCCCC; background-color:#CCCCCC" />
            <!-- / icon and title -->


        <div id="post_message_14142536">

            <font size="7"><font color="red">msaha 700</font></font><br />
<font size="7"><font color="red">shamali 20</font></font><br />
<font size="7"><font color="red"> 1700 almetr</font></font><br />
<font size="7"><font color="#ff0000">sooom bs</font></font><br />
<font size="7"><font color="#ff0000">albee3 qreeb</font></font>
        </div>
        <!-- message -->


</body>

extract.php

<?php 
$html = file_get_contents("1.html");
$pattern = '/<([!]+)([^]+).*>([^]+)(message\ \-\-\>)/';
   preg_match($pattern, $html, $matches);
 print_r($matches);


?>

我想在<!-- icon and title -->)blablabla(<!-- / message -->之间得到任何东西......  但我得到那个阵列:

Array ( [0] => [1] => ! [2] => -- [3] => message --> ) 

1 个答案:

答案 0 :(得分:0)

使用strpos查找第一个标记位置。然后使用strpos找到结束标记。我的意思是 - 如果你知道你在寻找什么,它们是独一无二的......那么preg_*函数中的问题是什么?

所以我想这样的事情会很好(我尽可能清楚地了解代码,以便逐步理解我的想法):

$tag_begin = "<!-- icon and title -->";
$tag_end   = "<!-- message -->";
$begin     = strpos($tag_begin,$text)+strlen($tag_begin);
$end       = strpos($tag_end,$text);
$result    = substr($begin,$end, $text);


如果您想在打开<!-- (.*) -->和关闭<!-- / (.*) -->之间查找并存储所有结构,也可以完全相同。
只有改变你必须做 - 首先找到preg_match所有开放结构名称。例如:

$result_cnt = preg_match_all('#<!-- [^/].*-->#', $text , $openings);

// Output for your example HTML is:
$openings = 
array (
  0 => 
  array (
    0 => '<!-- icon and title -->',
    1 => '<!-- message -->',
  ),
)

在$开口的一个循环之后,找到所有需要的代码。只需在正确的位置添加关闭“/”字符的开口。