元组PHP中值的模式匹配(正则表达式?)


Pattern Matching for a value in tuple PHP ( Regular Expressions? )

我很难理解RegEx,所以我不知道如何在这样的问题中使用它。

所以这里有一个元组
$tuple = "(12342,43244)";

我想做的是:
$value_one = 12342;

因此从(value_one,value_two)得到value_one

我知道explode( ',', $tuple )可以删除分解数组中第一个元素中的第一个字符"(",但这似乎太草率了,有没有办法在PHP中以这种方式进行模式匹配?

以下是最简单的preg_match示例,其中'(([0-9]+)正则表达式与(匹配,并将从09的一个或多个数字捕获到组1中:

$tuple = "(12342,43244)";
if (preg_match('~'(([0-9]+)~', $tuple, $m))
{
    echo $m[1];
}

查看IDEONE演示

包装成函数:

function retFirstDigitChunk($input) {
    if (preg_match('~'(([0-9]+)~', $input, $m)) {
        return $m[1];
    } else {
        return "";
    }
}

查看另一个演示

或者,将两者作为一个数组:

function retValues($input) {
    if (preg_match('~'((-?[0-9]+)'s*,'s*(-?[0-9]+)~', $input, $m))  {
        return array('left'=>$m[1], 'right'=>$m[2]);
    } else {
        return "";
    }
}
$tuple = "(12342,43244)";
print_r(retValues($tuple));

输出:Array( [left] => 12342 [right] => 43244 )

您必须搜索前面是大括号,后面是逗号的数字。模式是:

 $value_one = preg_replace('/'(('d+),.*/', '$1', $tuple);

如果您正在寻找高效的东西,请尽可能避免使用正则表达式:

$result = explode(',', ltrim($tuple, '('))[0];

sscanf($tuple, '(%[^,]', $result);