我有自定義標籤[tag val=100][/tag]
。我如何獲得val
以及標籤之間的任何內容?Preg_Match_All:模式中的兩個值
例如:
[tag val=100]apple[/tag]
值1 = 100
值2 =蘋果
編輯:如果我有,在標籤內的多個項目
例如:
[tag val=100 id=3]
我有自定義標籤[tag val=100][/tag]
。我如何獲得val
以及標籤之間的任何內容?Preg_Match_All:模式中的兩個值
例如:
[tag val=100]apple[/tag]
值1 = 100
值2 =蘋果
編輯:如果我有,在標籤內的多個項目
例如:
[tag val=100 id=3]
如果你在你的問題這樣的一個字符串,可以使用preg_match
代替preg_match_all
:
$str = "[tag val=100]apple[/tag]";
preg_match("/\[.+? val=(.+?)\](.+?)\[\/.+?\]/", $str, $matches);
$value = $matches[1]; // "100"
$content = $matches[2]; // "apple"
更新:我看你可能在每一個元素多個屬性。在這種情況下,這應該有效:
// captures all attributes in one group, and the value in another group
preg_match("/\[.+?((?:\s+.+?=.+?)+)\](.+?)\[\/.+?\]/", $str, $matches);
$attributes = $matches[1];
$content = $matches[2];
// split attributes into multiple "key=value" pairs
$param_pairs = preg_split("/\s+/", $attributes, -1, PREG_SPLIT_NO_EMPTY);
// create dictionary of attributes
$params = array();
foreach ($param_pairs as $pair) {
$key_value = explode("=", $pair);
$params[$key_value[0]] = $key_value[1];
}
這將是正則表達式爲:
'#\[tag val=([0-9]+)\]([a-zA-Z]+)\[\/tag])#'
Val是一個數字,你的'apple'可以是一個或多個字母字符的出現。如果您想匹配更多字符,請將[a-zA-Z]+
替換爲.+?
。
標籤是否可以嵌套,例如'[tag val = 100] fruits:[tag2] apples [/ tag2]和pear [/ tag]'? – webbiedave 2010-10-04 20:29:54
關於你的編輯:固定的可用屬性的選擇?或者你想檢查任何可能的? – poke 2010-10-04 20:31:04
如果您要求*正則表達式,那麼您應該清楚*正則性*! – splash 2010-10-04 20:36:33