如果在一段html代码里匹配一段包含特定td的tr该怎么写?例如
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>匹配包含<td>2</td>的tr

解决方案 »

  1.   


    $str = <<<HTML
    <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
    </tr>
    <tr>
    <td>4</td>
    <td>5</td>
    <td>6</td>
    </tr>HTML;preg_match('/<tr>[\d\D]*<td>2<\/td>[\d\D]*<\/tr>/iU', $str, $matches);echo htmlspecialchars($matches[0]);
    /*
    输出结果:
    <tr> <td>1</td> <td>2</td> <td>3</td> </tr>
    */
      

  2.   

    感谢回复如果是这样的呢
    <tr>
    <td class="key"><a href="http://www.baidu.com" target="_blank">百度</a></td>
    <td>2</td>
    <td>3</td>
    </tr>
    <tr>
    <td class="key"><a href="http://www.sohu.com" target="_blank">搜狐</a></td>
    <td>5</td>
    <td>6</td>
    </tr>匹配包含<td>2</td>的tr
      

  3.   

    首先二楼的兄弟已成功的解决了楼主的问题,其次我补充一种写法,仅当助兴。$str = '<tr>
    <td class="key"><a href="http://www.baidu.com" target="_blank">百度</a></td>
    <td>2</td>
    <td>3</td>
    </tr>
    <tr>
    <td class="key"><a href="http://www.sohu.com" target="_blank">搜</a></td>
    <td>5</td>
    <td>6</td>
    </tr>';
    preg_match_all('/<tr>(?=[\d\D]*<td>2<\/td>)[\D\d]*<\/tr>/iU', $str, $matches);
    print_r($matches);进一步的,当你有这样的需求,就是<tr> 中即有<td>2</td>  又有<td>3</td>还要有<td>4</td>时的正则表达式为
    <?php
    $str = '<tr>
    <td class="key"><a href="http://www.baidu.com" target="_blank">百度</a></td>
    <td>4</td>
    <td>2</td>
    <td>3</td>
    </tr>
    <tr>
    <td class="key"><a href="http://www.sohu.com" target="_blank">搜</a></td>
    <td>5</td>
    <td>6</td>
    </tr>';
    preg_match_all('/<tr>(?=[\d\D]*<td>3<\/td>)(?=[\d\D]*<td>4<\/td>)(?=[\d\D]*<td>2<\/td>)[\D\d]*<\/tr>/iU', $str, $matches);  
    print_r($matches);再举个例子//验证一个8-16 的字符串,中间有数字,有大写字母,也有小写字母.
    function is_good_pw($pw) {
        if(preg_match(''/(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,16}/'', $pw)) {
            return true;
        }
        return false;
    }
      

  4.   

    这位兄弟,一直持续的在csdn 的努力让吾辈深感敬佩!