我有自定义标签[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