假設我有一個這樣的字符串:PHP的preg_match函數變量提取
[$IMAGE[file_name|width|height]]
我如何能匹配,並獲得2個變量
$tag = "IMAGE"
$param = "file_name|width|height"
使用PHP的preg_match功能?
假設我有一個這樣的字符串:PHP的preg_match函數變量提取
[$IMAGE[file_name|width|height]]
我如何能匹配,並獲得2個變量
$tag = "IMAGE"
$param = "file_name|width|height"
使用PHP的preg_match功能?
<?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;
?>
$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"
}
+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;
+1以實現可操作的字符串操作。建議使用第三個參數'explode()'限制爲2個組件'$ p1 = explode('[',$ var,2);' –
謝謝@Michael - 我嘗試添加第三個參數,var_dump給了我一個「」的字符串[0]和完整字符串的字符串[1]? –
@Michael啊 - 明白了,需要3個而不是2個,因爲數組中的第一個項目是一個空字符串 –
我會用'([^ \]] *)'來避免貪婪的結果。 – rekire