簡體   English   中英

正則表達式和preg_replace PHP

[英]Regular Expression and preg_replace PHP

我需要用空字符串“”替換簡碼中的字符串。 這是代碼:

$pattern = "#\[(.*)( rep=['\"]{1}1['\"]{1})(.*)\]#i";
$replacement = '[$1$3]';

//Test cases:
$values = [
  'This is a [s1 val="1"] test',
  'This is a [s1 val="1"] test rep="1"',
  'This is a [s1 val="1" rep="1"] test',
  'This is a [s1 de="2" rep="1" be="2"] test',
  'This is a [rep="1" de="2" ] test',
  'This is a [s2 val="1" rep="1" de="2"] test ... This is a [s3 val="1" rep="1" de="2" ] test',
];

foreach($values as $value)
{
    echo preg_replace($pattern, $replacement, $value) . "\n";
}

前五個案例按預期工作。 不幸的是,里面有兩個rep =“ 1”的第六種情況無法按預期工作,因為我希望刪除兩個短代碼中的rep =“ 1”。 這可能在正則表達式上。

注意:rep =“ 1”必須在短代碼內([和]內)才能被替換。

您需要將非貪婪量詞放在正則表達式中

\[(.*?)(rep="1")(.*?)\]
   //^^          //^^

演示版

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM