关于正则表达式

wanshi131 2011-07-03 07:12:35
如果在一段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
...全文
127 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mu_rain 2011-07-04
  • 打赏
  • 举报
回复
这位兄弟,一直持续的在csdn 的努力让吾辈深感敬佩!
[Quote=引用 1 楼 yangball 的回复:]

PHP code

$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 ……
[/Quote]
mu_rain 2011-07-04
  • 打赏
  • 举报
回复
首先二楼的兄弟已成功的解决了楼主的问题,其次我补充一种写法,仅当助兴。

$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;
}
wanshi131 2011-07-04
  • 打赏
  • 举报
回复
[\d\D]* 代表什么意思啊?
刚接触正则表达式
PHP编程者 2011-07-04
  • 打赏
  • 举报
回复
和吼吼哈。。。
一起混吧 2011-07-04
  • 打赏
  • 举报
回复
不是一样的吗?用上面的正则也可以匹配出来。
wanshi131 2011-07-04
  • 打赏
  • 举报
回复
感谢回复

如果是这样的呢
<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
icecity304 2011-07-04
  • 打赏
  • 举报
回复
同样正在研究正则表达式中。。学习学习
床上等您 2011-07-03
  • 打赏
  • 举报
回复

$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>
*/

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧