preg 替换以匹配最接近的模式
preg replace to match the closest pattern
我有以下字符串
$message = "[quote=azerty]ce que je comprend pas c'est pourquoi j'ai due m'inscrire sur MQL5 ? [/quote]
C'est valable pour le système de signaux dans son ensemble, donc MT4 et MT5
[quote=azerty]si je mets le signal public ça change quoi ? [/quote]
Tu dois surtout mettre ton signal en gratuit, sinon tu devras payer pour suivre tes trades."
我正在使用下面的代码来匹配
callback_function($match) {
return "$match[1] wrote: <blockquote class='uncited'><p>$match[2]</p></blockquote>";
}
$str = preg_replace_callback("/\[quote=\"([^\"]+)\"\](.*?)\[\/quote\]/is", "callback_function", $message);
它与第 4 次匹配,而不是将第 1 次出现的 quote 与第 2 次匹配。
有什么办法可以改变这个吗?
您的代码中可能会更正的一些内容:
- 您正在尝试匹配
[quote]
标签中的引用文本,但 [quote=azerty]
中没有双引号。因此,您的模式的这一部分永远不会匹配:\"([^\"]+)\"
.
我们可以把它改成([^\]]+)
,来匹配除]
. 以外的任何字符
- 这里不需要使用回调,因为您不是在替换之前评估匹配。只需使用
preg_replace()
.
代码:
$pattern = '/\[quote=([^\]]+)\](.*?)\[\/quote\]/is';
$replacement = " wrote: <blockquote class='uncited'><p></p></blockquote>";
$str = preg_replace($pattern, $replacement, $message);
我有以下字符串
$message = "[quote=azerty]ce que je comprend pas c'est pourquoi j'ai due m'inscrire sur MQL5 ? [/quote]
C'est valable pour le système de signaux dans son ensemble, donc MT4 et MT5
[quote=azerty]si je mets le signal public ça change quoi ? [/quote]
Tu dois surtout mettre ton signal en gratuit, sinon tu devras payer pour suivre tes trades."
我正在使用下面的代码来匹配
callback_function($match) {
return "$match[1] wrote: <blockquote class='uncited'><p>$match[2]</p></blockquote>";
}
$str = preg_replace_callback("/\[quote=\"([^\"]+)\"\](.*?)\[\/quote\]/is", "callback_function", $message);
它与第 4 次匹配,而不是将第 1 次出现的 quote 与第 2 次匹配。 有什么办法可以改变这个吗?
您的代码中可能会更正的一些内容:
- 您正在尝试匹配
[quote]
标签中的引用文本,但[quote=azerty]
中没有双引号。因此,您的模式的这一部分永远不会匹配:\"([^\"]+)\"
.
我们可以把它改成([^\]]+)
,来匹配除]
. 以外的任何字符
- 这里不需要使用回调,因为您不是在替换之前评估匹配。只需使用
preg_replace()
.
代码:
$pattern = '/\[quote=([^\]]+)\](.*?)\[\/quote\]/is';
$replacement = " wrote: <blockquote class='uncited'><p></p></blockquote>";
$str = preg_replace($pattern, $replacement, $message);