结合preg_match正则表达式

时间:2015-03-08 05:40:42

标签: php regex preg-match

我想知道是否有办法以某种方式将多个正则表达式语句组合成一个?也许我可以使用一个数组,或者你可以纯粹使用正则表达式吗?

$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';
}

3 个答案:

答案 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);