删除两个引用标记之间的所有内

时间:2015-12-18 13:14:44

标签: php regex replace preg-replace

文本包含一些带随机数的引号。

请参阅:

$string = '[quote="Member123":hk1f9ynv]This is the quote Text  and we want remove it.[/quote:hk1f9ynv]

Here is the anwser to the quote. 

[quote:hk1f9ynv]Here is another quote, we want remove it too.[/quote:hk1f9ynv]

Thank you very much. Good job!';

编号:hk1f9ynv存储在数据库中并且是随机的。

输出应如下所示:

以下是报价的答案。非常感谢你。干得好!

我在堆栈上尝试了很多解决方案。似乎没什么用。例如:

preg_replace('/\[[^>]*\]/', '', $string); 
preg_replace('\[/?abc.*?\]', '', $string);

非常感谢。

2 个答案:

答案 0 :(得分:1)

preg_replace的两种可能方法:

第一个忽略引用标记的id:

~\[quote\b [^]]* ]
 [^[]*+
 (?: (?:\[ (?!/?quote\b) | (?R) ) [^[]* )*+
 \[/quote\b [^]]* ]~x

demo

第二个捕获id并使用它来查找结束标记:

~\[quote\b [^]:]* : (?<id>[^:]*) ]
 .*? # or: [^[]*+ (?:\[(?!\[/quote\b [^]:]* : \g{id} ])[^[]*)*+
 \[/quote\b [^]:]* : \g{id} ]~xs

demo

这两种模式旨在处理嵌套标记。

答案 1 :(得分:0)

为什么不使用$ string.substr(0,$ string.indexOf(“]”)来获取开始标记。)