用正则查找html中有id属性的html标签

昨天碰到的问题,在BBs问了得出的答应如下./(.+?)b/is  是非贪婪模式 匹配ab
/(.*)b/is 是贪婪模式 匹配abb,

如:
字符串<div style="float:left" id="ab">123213</div><div
class="a123">21314423</div>
不匹配<div class="a123">……</div>的内容

那么我们来看看基本的符号说明:

写这个例子可以用
新京葡娱乐场网址,<[a-zA-Z0-9][^>]+?id=[^>]+?>.*?</div>
匹配

*                                0次、1次或多次匹配其前的原子
+                                1次或多次匹配其前的原子
?                                0次或1次匹配其前的原子
.                                匹配除换行之外的任何一个字符

上一个php例子:

再看看简单的例子:

复制代码 代码如下:

你测试.+?和.*当然看不出区别了
测试这个字符串看看
'aaa<div style="font-color:red;">123456</div>bbb'
<.+?>会匹配<div style="font-color:red;">和</div>
<.*>会匹配<div style="font-color:red;">123456</div>

<?php
$str = '<div style="float:left" id="ab">123213</div><div
class="a123">213123</div>';
$search =
'#<[a-zA-Z0-9][^>]+?id=[^>]+?>.*?</div>#is';
preg_match_all($search,$str,$r);
echo '<pre>';
print_r($r);
echo '</pre>';
?>

最后看看高手怎么说的.

本例子输出

(.+)默认这是贪婪匹配
贪婪是先看整个字符串是否匹配, 如果不匹配,它会去掉字符串的最后一个字符,
并再次尝式, 如果还不匹配, 那么再去掉当前最后一个,
直到发现匹配或不剩任何字符.
过程大概这样:
$str='abcdabceba'
/.+b/  // 匹配一个或多个任意字符后面跟一个字母 b

复制代码 代码如下:

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。