关于正则方面的 一个想法,不知道可以不

无笔秀才 2011-03-02 06:10:33
如以下字符串
aaaafdsafdsa<bb>usetest</bb>
<div><bb>diyige</bb>321<bb>dierge</bb>cc</div>
<bb>usetest</bb>dd

我想找div 之间 的<bb></bb>里的数据
也就是
<bb>diyige</bb>
bb>dierge</bb>

这样的数据。。。
我现在是分2次做的,第一次找到div里的,<div><bb>diyige</bb>321<bb>dierge< /bb>cc</div>然后再找这里有几个<bb></bb>..
我想得知一个一次找出来的方法。。。谢谢了!
...全文
147 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImN1 2011-03-03
  • 打赏
  • 举报
回复
这个用xpath会很方便,不过字符串前后要插入一个tag,作为xml->root标记,在这里用了<string>;

$string ='<string>aaaafdsafdsa<bb>usetest</bb>
<div><bb>diyige</bb><bb>dierge</bb>cc</div>
<bb>usetest</bb>dd </string>';
$dom = new DOMDocument();
$dom->loadXML($string);
$xpath = new DOMXPath($dom);
$element = $xpath->query("/string/div/bb");
foreach ($element as $node) echo $node->textContent.'<br>' ;


ImN1 2011-03-03
  • 打赏
  • 举报
回复
放弃

研究了一个下午,即使用递归正则也只能做到获取前两个和最后两个<bb>,而且不是同时

如果事先知道<bb>个数就能全部获取

水平不足,再去修炼
cnsem 2011-03-03
  • 打赏
  • 举报
回复
你直接$rs[1][0]
就是你的数据了啊
bingfengsa 2011-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cnsem 的回复:]

你直接$rs[1][0]
就是你的数据了啊
[/Quote]
LZ的意思是要得到array(
"<bb>diyige</bb>",
"bb>dierge</bb>"
);
我还真不知道如何在一个表达式里把这些取出来,
无笔秀才 2011-03-02
  • 打赏
  • 举报
回复
谢谢 ,不过你这的出来的是
Array
(
[0] => Array
(
[0] => <div><bb>diyige</bb><bb>dierge</bb>cc</div>
)

[1] => Array
(
[0] => <bb>diyige</bb><bb>dierge</bb>
)
还是要对[1] 里面的进行一次 循环才可以取出我想要的数据啊。。
reallovelei 2011-03-02
  • 打赏
  • 举报
回复
$string ='aaaafdsafdsa<bb>usetest</bb>
<div><bb>diyige</bb><bb>dierge</bb>cc</div>
<bb>usetest</bb>dd ';
$patterns = "/<div>[^<]*(<bb>.*?<\/bb>)[^>]*<\/div>/is";
$rs = preg_match_all($patterns, $string, $matches);

var_dump($rs);

print_r($matches);

21,886

社区成员

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

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