作者LPH66 (-858993460)
看板RegExp
标题Re: [请益] 首页抓取论坛文章,对BBCode的清除。
时间Wed Feb 16 23:24:06 2011
※ 引述《aiyswu (绝望客)》之铭言:
: 各位你们好!
: 我现在使用的是 phpBB 3.0.8论坛。我的问题是,我有自己特制一个首页,将论坛
: 的文章捞到前页来;然而,某些文章需要清除BBCode是一个困扰我的问题。
: BBcode的格式为
: [url:uid]urlstr[/url:uid]
: [imgs=num:uid]urlstr[/imgs:uid]
: [url=urlstr:uid][img:uid]urlstr[/img:uid][/url:uid]
: 等等..
: uid为8位英数混合字串
: 我的作法是
: $str = preg_replace( '@\[.*?\](.*?)\[\/.*?\]@sm', "$1" ,$bbcodestr );
: 仍然会漏掉一些BBcode清不掉。
你这样等於是把 [ ] 和 [/ ] 一起清
那如果是单一个的 [ ] 而没有 [/ ] 的就会清不掉
: 一位前辈帮我改写了regex
: $regex = '|[[\/\!]*?[^\[\]]*?]|si';
| |si
[[\/\!
]*? [ 或 / 或 ! 有0或多个, 不 greedy
[^\[\]
]*? 非 [ 也非 ] 有0或多个, 不 greedy
] ]
也就是说 逻辑是先抓 [ / ! 的一串 再抓不是 [ ] 的一串 再抓 ]
等於是把开始和结束标签一视同仁来抓...
(不过既然都这样写了那个 ungreedy 的 ? 应该也可以不用才对)
话说回来我觉得你的前辈的意思应该是
$regex = '|
\[[\/\!]*?[^\[\]]*?]|si';
这样前面的意思就变成了 抓一个 [ 再抓 / ! 的一串 (下略)
这样好像比较对....
: $String = preg_replace($regex, '', $String);
: 一下就清掉了............
: 不过我看了很久,却完全看不懂为什麽它是这样写?
: 想请问一下,有没有人可以指点迷津一下呢...
--
1989/02/22 优希堂悟 1990/02/22 冬川こころ 1993/07/05 小町つぐみ 1994/05/21 高江
ミュウ 1995/04 欢迎来到 星野游々 1997/03/24 守野いづみ 1997/03/24 伊野瀬チサト
1998/06/18 守野くるみ 1999/10/19 打越钢太郎的 楠田ゆに 2000/02/15 樋口遥 2002/
12/17 八神ココ 2011/01/11 HAL18於朱仓岳坠机 2011/04/02 ∞与∫的世界 茜崎空启动
2012/05/21 第貮日蚀计画预定 2017/05/01~07 LeMU崩坏事故 2019/04/01~07 某大学合宿
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.254.23.234
1F:推 aiyswu:感谢! 我再研究看看@@ 02/21 17:21