Php 组合preg_匹配正则表达式

Php 组合preg_匹配正则表达式,php,regex,preg-match,Php,Regex,Preg Match,我想知道是否有办法将多个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 (p

我想知道是否有办法将多个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';
}

它可以组合在一个正则表达式中,如下所示:

$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
输出:

$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

您还可以修改
preg\u match()
调用,如下所示:

$reg  = '/^[a-zA-Z0-9]{7}(-lg)?$/';

if (preg_match($reg, $base, $m))
    echo isset($m[1]) ? 2 : 1; else echo 0;

您可以简单地计算匹配结果中的项目数:

$base   = 'Fz4vqVW';
$m = [];

preg_match('~^[a-zA-Z0-9]{7}(-lg)?$~D', $base, $m);
echo count($m);