【发布时间】:2015-07-01 01:01:32
【问题描述】:
我有 2 种序列号格式,如果其中任何一种匹配,我想将页面重定向到指定的 URL。这是我的代码,它有 2 个正则表达式 ORed,后跟一个 ORed 条件语句,该语句使用来自正则表达式的组:
$snregex = "/^(FL3)20([0-9]{2})([0-9]{2})([0-9]{5})$|^S[XNS][42][10][0]-([0-9]{2})([0-9]{2})([0-9]{2})-[0-9]{4}$/";
if (preg_match($snregex, $sn, $matches)) {
$mm = $matches[1];
$yr = $matches[2];
$wk = $matches[3];
# If SN MM codes are 25 or FL3 then use host server
if ($matches[1] == 'FL3' || $matches[1] == '25') {
$url = "http://192.168.10.115/logs/20" . $yr . "/" . $wk . "/" . $sn . "/";
# Redirect to host server
redirect($url, '303');
该代码仅适用于我在 preg_match 条件语句中首先输入的任何正则表达式,即如果 FL3 正则表达式是第一个,那么我可以成功匹配序列号,但不能成功匹配另一个。同样,如果我先将该语句更改为具有“25”序列号,我可以成功匹配该序列号,但不能匹配另一个。以下是否有问题:
$snregex = "/^(FL3)20([0-9]{2})([0-9]{2})([0-9]{5})$|^S[XNS][42][10][0]-([0-9]{2})([0-9]{2})([0-9]{2})-[0-9]{4}$/";
有效序列号示例如下:
FL320150500022
SS210-251509-0098
【问题讨论】:
-
向我们展示您要检查的字符串。
-
尝试将
ors 分组为/^(?:(FL3)20([0-9]{2})([0-9]{2})([0-9]{5})|^S[XNS][42][10][0]-([0-9]{2})([0-9]{2})([0-9]{2})-[0-9]{4})$/没有样本无法进一步测试。 -
您可以编写 两个 不同的 preg_match 测试(与您复杂的组合测试相反),每个正则表达式一个,然后您的 pb 变成一个简单的 php OR 测试。它也应该更容易阅读和维护......
-
由于您的模式完全不清楚,您能否为两个示例字符串显示年、月和周?
标签: php regex preg-match