Php Preg_Match_All:模式中的两个值

Php Preg_Match_All:模式中的两个值,php,regex,tags,preg-match-all,Php,Regex,Tags,Preg Match All,我有自定义标记[tag val=100][/tag]。如何获取val以及标签之间的任何内容 例: 值1=100 值2=苹果 编辑:如果标签中有多个项目怎么办 例: 这将是它的正则表达式: '#\[tag val=([0-9]+)\]([a-zA-Z]+)\[\/tag])#' Val是一个数字,您的“apple”可以是一个或多个字母字符。如果要匹配更多字符,请将[a-zA-Z]+替换为+?。这将是它的正则表达式: '#\[tag val=([0-9]+)\]([a-zA-Z]+)\[\/tag

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

例:

值1=100
值2=苹果

编辑:如果标签中有多个项目怎么办
例:


这将是它的正则表达式:

'#\[tag val=([0-9]+)\]([a-zA-Z]+)\[\/tag])#'

Val是一个数字,您的“apple”可以是一个或多个字母字符。如果要匹配更多字符,请将
[a-zA-Z]+
替换为
+?

这将是它的正则表达式:

'#\[tag val=([0-9]+)\]([a-zA-Z]+)\[\/tag])#'

Val是一个数字,您的“apple”可以是一个或多个字母字符。如果要匹配更多字符,请将
[a-zA-Z]+
替换为
+?

如果问题中有这样的字符串,可以使用
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];
}

如果问题中有这样的字符串,可以使用
preg\u match
而不是
preg\u match\u 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=100]水果:[tag2]苹果[/tag2]和梨[/tag]
?关于编辑:内部可用属性的选择是否已修复?或者您想检查任何可能的内容吗?如果您要求的是正则表达式,那么您应该清楚正则性!标签是否可嵌套,例如,
[tag val=100]水果:[tag2]苹果[/tag2]和梨[/tag]
?关于编辑:内部可用属性的选择是否已修复?或者您想检查任何可能的内容吗?如果您要求的是正则表达式,那么您应该清楚正则性!您可以稍微调整RE以限制可用于属性名称和值的字符。我使用了
+?
,但您可以将其更改为
[A-Za-z]+?
或类似的内容。您可以稍微调整RE,以限制可用于属性名称和值的字符。我使用了
+?
,但您可以将其更改为
[A-Za-z]+?
或类似的内容。