$str = '
其他文本其他文本<div>仅单层</div></div>(注意:后面多一个</div>)
其他文本其他文本其他文本
<div>外层
<div>中层
<div>内层</div>
</div>
</div>
其他文本<font>外层<span>里层</span></font>其他文本其他文本……
';
$re = ???
preg_match_all($re,$str,$matches);
print_r($matches[0]);
希望结果是:
array(
0 => <div>仅单层</div>
1 => <div>外层
<div>中层
<div>内层</div>
</div>
</div>
2 => <font>外层<span>里层</span></font>
)往往出来的第一个匹配是:<div>仅单层</div></div>,这不是想要的 <div>仅单层</div>国内介绍正则递归的资料很少。希望高手顺便解释一下递归用法。
其他文本其他文本<div>仅单层</div></div>(注意:后面多一个</div>)
其他文本其他文本其他文本
<div>外层
<div>中层
<div>内层</div>
</div>
</div>
其他文本<font>外层<span>里层</span></font>其他文本其他文本……
';
$re = ???
preg_match_all($re,$str,$matches);
print_r($matches[0]);
希望结果是:
array(
0 => <div>仅单层</div>
1 => <div>外层
<div>中层
<div>内层</div>
</div>
</div>
2 => <font>外层<span>里层</span></font>
)往往出来的第一个匹配是:<div>仅单层</div></div>,这不是想要的 <div>仅单层</div>国内介绍正则递归的资料很少。希望高手顺便解释一下递归用法。
解决方案 »
- 请教一个php引用其他网站页面的问题
- 话说php
- 泡沫排序算法
- asp跳转问题?
- 【求助】php + sphinx 配置后 无法使用!返回空!sphinx.conf是否配置正确
- 备份数据库的问题
- 公布我的一些主要作品
- 请问php的register设置没有打开时,如何接收上传文件的内容?
- 在php中dl()可以使用.dll文件。但是怎么取出其中的数据啊。
- 求解!!谜之错误!
- PHP startup:unable to load dynamic library' D:/PC_wevserver/php/ext/php_mcrypt.dll-找不到指定的模块 "Startup Unable
- 请问改网站是怎么实现自动绑定域名的。
其实就是正则递归,比如(?1),表示递归引用第一个括号的内容。我大概知道,但还是写不好。搜索老帖,找到一位高人写的如下正则,作用是匹配一个*.php文件中的每个类class的内容。$re = "`class[^{]+(\{([^{}]*|(?1))*\})`s";谁能分析一下用法?
//*
$str = '
其他文本其他文本 <div>仅单层 </div> </div>(注意:后面多一个 </div>)
其他文本其他文本其他文本
<div>外层
<div>中层
<div>内层 </div>
</div>
</div>
其他文本 <font>外层 <span>里层 </span> </font>其他文本其他文本……
';
$re = "#<[a-z]([^ >]+)[^<>]*>([^<>]*|(?R))*</[^<>]+>#is";
//*/preg_match_all($re,$str,$matches);
print_r($matches[0]);
?>
$re = "`class[^{]+(\{([^{}]* ¦(?1))*\})`s";
也是ice_berg16 写的,class[^{]+ 以class开始,后跟非{一个或多个(\{([^{}]* ¦(?1))*\})分组
\{([^{}]* ¦(?1))*\} 匹配{}以内容
([^{}]* ¦(?1))* 中的内容,并递归,这具看不明白,不知为何要用(?1),这个指的递归哪个,第一个分组捕获?另外(?1)*后面有个*也不明白有什么用手册上只有一小段英文介绍
ice_berg16很强大!
<?php
$str = '
其他文本其他文本 <div>仅单层 </div> </div>(注意:后面多一个 </div>)
其他文本其他文本其他文本
<div>外层
<div>中层
<div>内层 </div>
</div>
</div>
# 这是另一种情况
# start 闭合错误
<div>外层
<div>中层
<div>内层 </div>
</div>
</font>
# end 闭合错误
其他文本 <font>外层 <span>里层 </span> </font>其他文本其他文本……
';
$re = "/<([a-z]+)[^>]*>([^<>]|(?R))*<\/\\1>/is";
preg_match_all($re,$str,$matches);
print_r($matches[0]);
echo PHP_VERSION; // 5.2.5
?>嘿嘿~被抢先了一步,整理一下~套点分~
[normal text here]加粗红色[color=#0000FF]蓝色红色[/color][/not match]
';
请问能否一次性去掉配对的UBB代码?$re = ?
$result = preg_replace($re, $replace, $str);
print_r($result);结果为:
[normal text here]加粗红色蓝色红色[/not match]