[英]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.