使用正则表达式获取双括号"{{ }}"内的值

3

在PHP中使用正则表达式,将用{{}}引号括起来的文本提取为数组。

例如:

$str = "This is sample content with a dynamic value {{value1}} and also have more dynamic values {{value2}}, {{value3}}";

需要输出以下数组格式,请见如下内容:
array(value1,value2,value3);

1
你尝试过什么吗? - Rohit Jain
我在正则表达式方面不是很擅长,尝试通过参考这个链接:http://php.net/manual/en/function.preg-match.php。 - Pradeep shyam
3个回答

8
这将有效:
$str = "This is sample content with a dynamic value {{value1}} and also have more dynamic values {{value2}}, {{ value3 }}";
if (preg_match_all("~\{\{\s*(.*?)\s*\}\}~", $str, $arr))
   var_dump($arr[1]);

输出:

array(3) {
  [0]=>
  string(6) "value1"
  [1]=>
  string(6) "value2"
  [2]=>
  string(6) "value3"
}

我需要在花括号内进行数组精确匹配,因为我要检查数组是否有索引"1"。你能告诉我没有花括号的值总是在数组索引"1"上吗? - Pradeep shyam
是的,它将始终是$arr[1],因为它与匹配组#1相关,即方括号内的表达式。 - anubhava
我有一件小事需要做,需要在花括号内修剪空格。例如:如果我像这样给出{{ value1 }}。是否可以在同一个表达式中实现? - Pradeep shyam

1
请使用这个:
preg_match_all('~\{\{(.*?)\}\}~', $string, $matches);
var_dump($matches[1]);

输出:

array(3) {
  [0] =>
  string(6) "value1"
  [1] =>
  string(6) "value2"
  [2] =>
  string(6) "value3"
}

它能够工作。但我需要在花括号内进行数组精确匹配,因为我必须检查该数组是否具有索引“1”。你能告诉我没有花括号值将始终出现在数组索引“1”吗? - Pradeep shyam
这是因为大括号中的值将被第一组匹配。这是由于 ()$matches 数组将首先包含整个匹配,然后是匹配的第一、二、...组。这就是它的工作原理。 - hek2mgl

0
preg_match_all('/\{\{([^}]+)\}\}/', $str, $matches);
$array = $matches[1];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接