我想知道是否有一种方法可以将多个regex语句组合成一个语句?也许我可以使用数组,或者您是否可以仅使用regex来完成此操作?
$reg = '/[a-zA-Z0-9]{7}$/';
$reg_l = '/[a-zA-Z0-9]{7}-lg$/';
$base = 'Fz4vqVW'; // May also be Fz4vqVW-lg
if (preg_match($reg,$base) { //Just checks for a 7 long string
echo '1';
} elseif (preg_match($reg_l,$base) { //Checks for 7 long string with -lg at the end
echo '2';
} else {
echo '0';
}发布于 2015-03-08 13:50:14
它可以在一个正则表达式中与preg_replace_callback结合,如下所示:
$reg = '/^(?:([a-zA-Z0-9]{7})(-lg)?|.*)$/';
$base = 'Fz4vqVW'; // May also be Fz4vqVW-lg
echo preg_replace_callback($reg, function($m) {
if (isset($m[2])) return 2; elseif (isset($m[1])) return 1; else return 0; }, $base);示例代码:
$arr=array('Fz4vqVW', 'Fz4vqVW-lg', 'foobar');
foreach ($arr as $a) {
echo preg_replace_callback($reg, function($m) { if (isset($m[2])) return 2;
elseif (isset($m[1])) return 1; else return 0; }, $a)."\n";
}输出:
1
2
0发布于 2015-03-08 14:22:03
您还可以修改preg_match()调用,如下所示:
$reg = '/^[a-zA-Z0-9]{7}(-lg)?$/';
if (preg_match($reg, $base, $m))
echo isset($m[1]) ? 2 : 1; else echo 0;发布于 2015-03-08 22:02:32
您可以简单地计算匹配结果中的项目数:
$base = 'Fz4vqVW';
$m = [];
preg_match('~^[a-zA-Z0-9]{7}(-lg)?$~D', $base, $m);
echo count($m);https://stackoverflow.com/questions/28923480
复制相似问题