我很难理解RegEx,所以我不知道如何在这样的问题中使用它。
所以这里有一个元组$tuple = "(12342,43244)";
我想做的是:$value_one = 12342;
因此从(value_one,value_two)
得到value_one
。
我知道explode( ',', $tuple )
可以删除分解数组中第一个元素中的第一个字符"(",但这似乎太草率了,有没有办法在PHP中以这种方式进行模式匹配?
以下是最简单的preg_match
示例,其中(([0-9]+)
正则表达式与(
匹配,并将从0
到9
的一个或多个数字捕获到组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);