簡體   English   中英

PHP Preg_replace占位符

[英]PHP Preg_replace placeholders

嗨,我正在寫一些東西來處理我的視圖,這里我需要一個preg_replace,但是我似乎無法正常工作,所以我取消了代碼。

我要替換的字符串基於模板是動態的,例如

{{name}} is {{age}} years old

傳遞給函數的信息是一個數組,例如

array( 'name' => 'John Doe', 'age' => '27' );

到目前為止,我的模式是\\{{([a-zA-Z0-9]+)\\}}但這似乎只匹配一對大括號。

我在遍歷preg_match_all中的結果時也遇到了問題。

提前致謝

...但是,這似乎只匹配一對大括號。

您忘記了第二個{

/\{\{([a-zA-Z0-9]+)\}\}/
  -^-               -^-

無論如何,請嘗試使用此正則表達式,它會短一些:

/\{\{([^}]+)\}\}/

preg_replace_callback似乎是一個不錯的選擇。

$str = "{{name}} is {{age}} years old";
$values = array( 'name' => 'John Doe', 'age' => '27' );
echo preg_replace_callback("/\{{([a-z0-9]+?)\}}/i", function ($result)
use ($values) {
   if (isset($result[1])) {
      return $values[$result[1]];
   }
}, $str);

主要問題是{{[az]+}}{{name ... age}}匹配。 使用? 使+不太願意,因此它只匹配第一個 }而不是最后一個。

為什么不使用sprintf

$template = '%s is %d years old';
$vars = array('name' => 'John Doe', 'age' => 27);
$output = sprintf($template, $vars['name'], $vars['age']);

暫無
暫無

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

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