preg替换以匹配最接近的模式

时间:2015-10-13 04:34:18

标签: regex preg-replace preg-replace-callback

我有以下字符串

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

而不是匹配第一次出现的第二次出现,它与第四次出现匹配。 有什么方法可以改变这个吗?

1 个答案:

答案 0 :(得分:1)

您的代码中可能会纠正的一些事情:

  1. 您尝试匹配<mvc:View xmlns:mvc="sap.ui.core.mvc" xmlns="sap.m" xmlns:l="sap.ui.layout" xmlns:html="http://www.w3.org/1999/xhtml" controllerName="sap.ui.core.sample.trial.targetsApp.controller.View2" xmlns:form="sap.ui.layout.form"> <App> <Page title="TableView" showNavButton="true" navButtonPress="onBack"> <l:HorizontalLayout id="tableid"> </l:HorizontalLayout> <footer> <Bar> <contentRight> <Button text="Add New Rows" press="displayPress" /> <Button text="display" press="displayPress" /> </contentRight> </Bar> </footer> </Page> </App> </mvc:View> 代码中的引用文字,但[quote]中没有双引号。因此,您的模式的这一部分永远不会匹配:[quote=azerty] 我们可以将其更改为\"([^\"]+)\",以匹配除([^\]]+)以外的任何字符。
  2. 这里不需要使用回调,因为你没有在替换之前评估匹配。只需使用]
  3. <强>代码:

    preg_replace()

    ideone demo