我想知道是否有办法以某种方式将多个正则表达式语句组合成一个?也许我可以使用一个数组,或者你可以纯粹使用正则表达式吗?
$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';
}
答案 0 :(得分:1)
它可以合并为一个正则表达式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
答案 1 :(得分:1)
您还可以按如下方式修改preg_match()
来电:
$reg = '/^[a-zA-Z0-9]{7}(-lg)?$/';
if (preg_match($reg, $base, $m))
echo isset($m[1]) ? 2 : 1; else echo 0;
答案 2 :(得分:0)
您只需计算匹配结果中的项目数:
$base = 'Fz4vqVW';
$m = [];
preg_match('~^[a-zA-Z0-9]{7}(-lg)?$~D', $base, $m);
echo count($m);