2013-10-11 104 views
1

正则表达式在PHP中用数组中的“{{}}”获取引用的文本。正则表达式获取双花括号内的值“{{}}”

对于例如:

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

需要输出作为像下面阵列,

array(value1,value2,value3); 
+1

你尝试过什么? –

+0

我不是很擅长正则表达式,并尝试通过引用此:http://php.net/manual/en/function.preg-match.php – shyammtp

回答

7

这将工作:

$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]); 

OUTPUT:

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

我不需要大括号... – shyammtp

+0

明白了,做了一个编辑。现在试试。 – anubhava

+0

我需要在花括号内部有数组完全匹配,因为我必须检查数组是否具有索引“1”。你能告诉我没有大括号值总是会出现在数组索引“1”? – shyammtp

1

使用此:

preg_match_all('~\{\{(.*?)\}\}~', $string, $matches); 
var_dump($matches[1]); 

输出:

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

它的工作。但我需要在花括号里面有数组完全匹配,因为我必须检查数组是否索引为“1”。你能告诉我没有大括号值总是会出现在数组索引“1”? – shyammtp

+0

这是因为大括号之间的值将被第1组匹配。这是因为()。 '$ matches'数组将首先包含整个匹配,然后匹配组1,2,...这就是它的工作原理 – hek2mgl

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