Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.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 正则表达式删除后引号_Php_Regex_Replace - Fatal编程技术网

Php 正则表达式删除后引号

Php 正则表达式删除后引号,php,regex,replace,Php,Regex,Replace,假设我有这段文字: [quote=XXXXXX]ABC[quote=YYYYYY]DEF[/quote]GHI[/quote]JKL[quote=ZZZZZ]MNO[/quote] 如何删除[quote]和[quote]标记之间尽可能大的所有文本,即上述文本将成为JKL([quote=XXXXX]…[/quote]被删除,[quote=ZZZZZ]…[/quote])。请注意,它不应替换所有文本,因为它以引号标记开头和结尾,也不应替换[quote=XXXXX]ABC[quote=YYYYY]D

假设我有这段文字:

[quote=XXXXXX]ABC[quote=YYYYYY]DEF[/quote]GHI[/quote]JKL[quote=ZZZZZ]MNO[/quote]
如何删除[quote]和[quote]标记之间尽可能大的所有文本,即上述文本将成为
JKL
([quote=XXXXX]…[/quote]被删除,[quote=ZZZZZ]…[/quote])。请注意,它不应替换所有文本,因为它以引号标记开头和结尾,也不应替换
[quote=XXXXX]ABC[quote=YYYYY]DEF[/quote]
。这在正则表达式中是可能的吗


谢谢你的回答!:)

要匹配嵌套结构,可以编写递归模式(用
(?R)
引用自身的模式):

但是如果您认为它太复杂,您也可以为最里面的引用部分编写一个模式,并应用它,直到
preg\u replace
的count参数设置为零:

$pattern = '~\[quote\b[^]]*][^[]*+(?:\[(?!/?quote\b)[^[]*)*+\[/quote]~i';
do {
    $txt = preg_replace($pattern, '', $txt, -1, $count);
} while ($count);

使用解析器来完成这类工作。这些引号真的嵌套了吗?@delboy1978uk:yepI想知道一些老生常谈的答案是如何获得多次赞成票的,而聪明的答案就像墙花一样。
$pattern = '~\[quote\b[^]]*][^[]*+(?:\[(?!/?quote\b)[^[]*)*+\[/quote]~i';
do {
    $txt = preg_replace($pattern, '', $txt, -1, $count);
} while ($count);