簡體   English   中英

PHP正則表達式,標記在字符串中多次出現

[英]PHP regex, tags occur multiple times in a string

我的目標是加粗標簽{{}}之間的內容。 問題是,如果標簽多次出現,將無法按我想要的方式工作。

$string1 = "hello my {{name}} is bo.";
$string2 = "hello my {{name}} is bo. Or {{not}}";
$startPoint = '{{';
$endPoint = '}}';
$result = preg_replace('/('.preg_quote($startPoint).')(.*)('.preg_quote($endPoint).')/si', '<b>$2</b>', $string);

結果為string1 :(應如此)

你好,我波。

結果與string2 :(不是我想要的)

你好,我的名字}}是bo。 或不

我覺得我缺少一些愚蠢的東西,只是不確定什么。 所有幫助將不勝感激。

編輯:謝謝! (。*?)很有魅力,如果您寫答案,我會將其標記為已解決。 謝謝!

你為什么不試試這個?

$pattern = "~{{([^}{]*)}}~";
$replacement = "<b>$1</b>";
echo preg_replace($pattern, $replacement, $string);

.*會進行貪婪的匹配。 那就是它吃掉了第一個{{和最后一個}}大括號之間的所有內容。 要進行最短的匹配,您需要添加一個量詞? 就在* 由於模式中存在捕獲組,因此所有匹配的字符都存儲在第一組中,即(.*) 這就是為什么您獲得字符串name}} is bo. Or {{not name}} is bo. Or {{not第1組。

模式說明:

  • {{匹配兩個大括號。
  • ([^}{]*)匹配並捕獲零個或多個字符,但不捕獲}{

  • }}匹配兩個閉花括號。

暫無
暫無

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

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