preg_match的多个模式

时间:2014-03-22 19:14:41

标签: php regex preg-match

我的情况是:我一个字一个地处理一个数组。我希望做的和 工作,是捕捉某个词。但为此我需要使用preg-match测试两种或更多模式。

这是我的代码:

function search_array($array)
{
$pattern  = '[A-Z]{1,3}[0-9]{1,3}[A-Z]{1,2}[0-9]{1,2}[A-Z]?';
$pattern2 = '[A-Z]{1,7}[0-9]{1,2}';
$patterns = array($pattern, $pattern2); 
$regex = '/(' .implode('|', $patterns) .')/i'; 
foreach ($array as $str) {
  if (preg_match ($regex, $str, $m)){
    $matches[] = $m[1];
    return $matches[0]; 
  }
 }
}

我可以拥有的数组示例:

Array ( [0] => X [1] => XXXXXXX [2] => XXX [3] => XXXX [4] => ABC01DC4 )

Array ( [0] => X [1] => XXXXXXX [2] => XXX [3] => ABCDEF4 [4] => XXXX [5] => XX )

我想说的话:

-In the first array  : ABC01DC4

-In the second array : ABCDEF4

问题不在于模式本身,而是在同一个pregmatch中使用多个模式的语法

1 个答案:

答案 0 :(得分:3)

您的代码与我合作,我没有发现代码或REGEX有任何问题。此外,您提供的描述不足以了解您的需求。

但是,我在观察您的代码后猜到了一个问题,即您没有使用任何anchor^...$)来执行匹配整个字符串。您的正则表达式可以找到这些输入的匹配项:%ABC01DC4VABCDEF4EE。因此,请使用您的代码更改此行:

$regex = '/^(' .implode('|', $patterns) .')$/i'; 
          -+-                             -+-