2015-10-13 61 views
0

我有以下字符串预浸更换相匹配的最接近的模式

$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." 

我使用下面的代码来代替匹配报价的第一occurence与第二occurence匹配

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

,它与第四次匹配。 有什么方法可以改变它?

回答

1

,可能在你的代码进行修正一些东西:

  1. 你试图在[quote]标签引用的文本匹配,但没有双引号[quote=azerty]。因此,你的模式的这部分将永远不会匹配:\"([^\"]+)\"
    我们可以将其更改为([^\]]+),以匹配除]以外的任何字符。
  2. 这里没有必要使用回调,因为在替换之前您没有评估匹配。只需使用preg_replace()即可。

代码:

$pattern = '/\[quote=([^\]]+)\](.*?)\[\/quote\]/is'; 
$replacement = "$1 wrote: <blockquote class='uncited'><p>$2</p></blockquote>"; 
$str = preg_replace($pattern, $replacement, $message); 

ideone demo

+0

谢谢,我已经在这个问题放“错了,但的preg_replace作品比preg_replace_callback更好此外,它替换所有出现次数。非常感谢。 – user1309690