Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带preg的bbcode样式标记_Php_Pcre - Fatal编程技术网

Php 带preg的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]。我可以大量替换标记并保

好的,我已经在我的论坛上为bbcode样式的标签做了一组字符串替换,替换
[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 with
Chris说
为结束标记添加另一个替换将消除嵌套问题。啊,谢谢,我读得有点错,它在标记之间搜索文本,但没有替换结束标记,我已将该位去掉并修改了一点。但是+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]'
    );