如果在一段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
<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
$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>
*/
<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
<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;
}