2011-12-13 93 views
1

假设我有一个这样的字符串:PHP的preg_match函数变量提取

[$IMAGE[file_name|width|height]] 

我如何能匹配,并获得2个变量

$tag = "IMAGE" 
$param = "file_name|width|height" 

使用PHP的preg_match功能?

回答

0
<?php 
$string = '[$IMAGE[file_name|width|height]]'; 
preg_match("/\[\\$(.*)\[(.*)\]\]/",$string,$matches); 

$tag = $matches[1]; 
$param = $matches[2]; 

echo "TAG: " . $tag; 
echo "<br />"; 
echo "PARAM: " . $param; 
?> 
+1

我会用'([^ \]] *)'来避免贪婪的结果。 – rekire

6
$string = '[$IMAGE[file_name|width|height]]'; 
// Matches only uppercase & underscore in the first component 
// Matches lowercase, underscore, pipe in second component 
$pattern = '/\[\$([A-Z_]+)\[([a-z_|]+)\]\]/'; 
preg_match($pattern, $string, $matches); 

var_dump($matches); 
array(3) { 
    [0]=> 
    string(32) "[$IMAGE[file_name|width|height]]" 
    [1]=> 
    string(5) "IMAGE" 
    [2]=> 
    string(22) "file_name|width|height" 
} 
+0

+1,因为它将针对同一个字符串中的多个实例进行缩放 –

1

不使用preg_match,但效果一样好。

$var = '[$IMAGE[file_name|width|height]]'; 
$p1 = explode('[',$var); 
$tag = str_replace('$','',$p1[1]); 
$param = str_replace(']','',$p1[2]); 

echo $tag.'<br />'; 
echo $param; 
+0

+1以实现可操作的字符串操作。建议使用第三个参数'explode()'限制为2个组件'$ p1 = explode('[',$ var,2);' –

+0

谢谢@Michael - 我尝试添加第三个参数,var_dump给了我一个“”的字符串[0]和完整字符串的字符串[1]? –

+1

@Michael啊 - 明白了,需要3个而不是2个,因为数组中的第一个项目是一个空字符串 –