我的情况是:我一个字一个地处理一个数组。我希望做的和 工作,是捕捉某个词。但为此我需要使用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中使用多个模式的语法
答案 0 :(得分:3)
您的代码与我合作,我没有发现代码或REGEX有任何问题。此外,您提供的描述不足以了解您的需求。
但是,我在观察您的代码后猜到了一个问题,即您没有使用任何anchor(^...$
)来执行匹配整个字符串。您的正则表达式可以找到这些输入的匹配项:%ABC01DC4V
或ABCDEF4EE
。因此,请使用您的代码更改此行:
$regex = '/^(' .implode('|', $patterns) .')$/i';
-+- -+-