繁体   English   中英

Preg_Match_All:模式中的两个值

[英]Preg_Match_All: two values in a pattern

我有自定义标签[tag val=100][/tag] 我如何获得val以及标签之间的内容?

例如:

[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]+替换为.+? 如果要匹配更多字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM