Php 带preg的bbcode样式标记
好的,我已经在我的论坛上为bbcode样式的标签做了一组字符串替换,替换Php 带preg的bbcode样式标记,php,pcre,Php,Pcre,好的,我已经在我的论坛上为bbcode样式的标签做了一组字符串替换,替换[b]和[I]等相当简单,因为我可以直接替换它们而不会出现问题 有两个标签给我带来了问题,因为我需要用它们做的事情更复杂[quote]和[url]都很好,但是,我想让用户选择[quote=person\u-to\u-quote]和[url=url]链接文本[/url],[quote=]标记也需要能够嵌套 因此,我需要能够替换开头标记[quote=,然后保留字符串添加]显示引号,然后结束[/quote]。我可以大量替换标记并保
[b]
和[I]
等相当简单,因为我可以直接替换它们而不会出现问题
有两个标签给我带来了问题,因为我需要用它们做的事情更复杂[quote]
和[url]
都很好,但是,我想让用户选择[quote=person\u-to\u-quote]
和[url=url]链接文本[/url]
,[quote=]
标记也需要能够嵌套
因此,我需要能够替换开头标记[quote=
,然后保留字符串添加]
显示引号,然后结束[/quote]
。我可以大量替换标记并保留=person
很好,但这是通过我作弊和简单地将结束标记添加到文本中来完成的。我真正想做的是把=
和]
之间的所有东西都存储起来,这样我就可以单独操作它了
目前,我正在使用数组和Simpley替换内联文本,因此:
"[quote=" is replaced by "<span class=\"quote\">[Quote: ",
其中$person是一个存储人名的变量,因此可以动态替换
与url类似,我希望替换[url=link]link text[/url]
,使其能够接受url并内联替换,因此输出为:
"[url=" is replaced by "<a href=$URL>"
然后,关闭标记将通过我的普通标记替换搜索进行提取。尝试:
$output=preg\u replace\u回调(
“/\[quote=([^\]]+)?\]([^\[]+)?\[\/quote\]]?/”,
创建函数(
“$matches”,
“return\”[quote=”替换为“\”。$matches[1]。\'表示:“,\”;”
),
“[quote=person]这里有一些文字”
);
Hmm,如果我读对了,它会替换整个成对的标记吗?输出很好,因为它给了我一个span类,但它不需要搜索结束引号标记?因为两个标记都被替换了,它正在改变嵌套,并且不会对嵌套引号起作用。结束标记可以用第二次传递来替换,所以它不需要includeng.所以我需要修改它,只替换[quote=chris]
part withChris说
为结束标记添加另一个替换将消除嵌套问题。啊,谢谢,我读得有点错,它在标记之间搜索文本,但没有替换结束标记,我已将该位去掉并修改了一点。但是+1表示方向正确!很高兴我能不是给你一个完整的解决方案,我只是想说明如何使用这个函数来解决你的问题。是的,我添加了上面修改过的代码作为参考,谢谢你的提示,regex仍然让我害怕!
"[url=" is replaced by "<a href=$URL>"
$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);
$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]([^\[]+)?\[\/quote\]?/',
create_function(
'$matches',
'return \'"[quote=" is replaced by "<span class=\"quote\">\'.$matches[1].\' says: ",\';'
),
'[quote=person]some text here[/quote]'
);