<p><a href="index.html"><img src="image.jpg" width="140"></a>this is the text part</p>
<img width='1' height='1' src='mf.gif' border='0'/>
<div class='related'>
<p>comments</p>
<ul>
<li><a href='123/comment1.html'>comment1</a></li>
<li><a href='123/comment2.html'>comment2</a></li>
<li><a href='123/comment3.html'>comment3</a></li>
<li><a href='123/comment4.html'>comment4</a></li>
<li><a href='123/comment5.html'>comment5</a></li>
</ul>
</div>
<div class='viral'>
<table border='0'>
<tr>
<td valign='middle'><a href="contact.html" target="_blank"><img src="email.gif" border="0" /></a></td>
<td valign='middle'><a href="book.html" target="_blank"><img src="book.gif" border="0" /></a></td>
</tr>
</table>
</div>
<br/><br/><a href="a2.htm"><img src="a2.img" border="0"/></a>有这样一段文字,如何正则取出
1 第一个P标签里的文字部分“this is the text part”?
2 #related UL LI 里面所有的 a 标签 URL “a href='123/comment1.html...” 以及所有的文字部分 “comment1...”谢谢。

解决方案 »

  1.   


    $str = <<<eof
    <p><a href="index.html"><img src="image.jpg" width="140"></a>this is the text part</p>
    <img width='1' height='1' src='mf.gif' border='0'/>
    <div class='related'>
    <p>comments</p>
    <ul>
    <li><a href='123/comment1.html'>comment1</a></li>
    <li><a href='123/comment2.html'>comment2</a></li>
    <li><a href='123/comment3.html'>comment3</a></li>
    <li><a href='123/comment4.html'>comment4</a></li>
    <li><a href='123/comment5.html'>comment5</a></li>
    </ul>
    </div>
    <div class='viral'>
    <table border='0'>
    <tr>
    <td valign='middle'><a href="contact.html" target="_blank"><img src="email.gif" border="0" /></a></td>
    <td valign='middle'><a href="book.html" target="_blank"><img src="book.gif" border="0" /></a></td>
    </tr>
    </table>
    </div>
    <br/><br/><a href="a2.htm"><img src="a2.img" border="0"/></a>
    eof;
    echo '<pre />';
    if(preg_match('/<div\s+class=\'related\'>(.*?)<\/div>/is',$str,$arr)){
     // print_r($arr);
     preg_match('/<p>(.*?)<\/p>/i',$arr[1],$subarr);
     echo $subarr[1]."<br />" ;
     preg_match_all('/<a\s+href=\'(.*?)\'>(.*?)<\/a>/i',$arr[1],$subarr);
     print_r($subarr) ;
    }输出:
    commentsArray
    (
        [0] => Array
            (
                [0] => comment1
                [1] => comment2
                [2] => comment3
                [3] => comment4
                [4] => comment5
            )    [1] => Array
            (
                [0] => 123/comment1.html
                [1] => 123/comment2.html
                [2] => 123/comment3.html
                [3] => 123/comment4.html
                [4] => 123/comment5.html
            )    [2] => Array
            (
                [0] => comment1
                [1] => comment2
                [2] => comment3
                [3] => comment4
                [4] => comment5
            ))
      

  2.   

    好像漏了这个 preg_match("/<p>.*(?<=\<)([^<]*)<\/p>/is",$str,$arr);echo $arr[1];
      

  3.   

    sorry!写错了
    preg_match("/<p>.*(?<=\>)([^>]*)<\/p>/isU",$str,$arr);echo $arr[1];
    这个才对,>的方向弄反了
      

  4.   

    呵呵 漏了一个啊
    补上:
    if(preg_match('/<p>.*(?<=\<\/a\>)(.*?)(?=\<\/p\>)/is',$str,$arr)){
      print_r($arr);
    }