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);