首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有条件的preg_match多模式

有条件的preg_match多模式
EN

Stack Overflow用户
提问于 2015-06-30 15:56:43
回答 1查看 624关注 0票数 0

我有两个序列号格式,如果其中任何一个匹配,我想将页面重定向到指定的URL。下面是我的代码,它有2个regexes ORed,后面是一个ORed条件语句,它使用来自regexes的组:

代码语言:javascript
复制
$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”序列号,我可以成功地匹配该序列号,但不匹配另一个序列号。下列情况是否有问题:

代码语言:javascript
复制
$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 210-251509-0098

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 16:08:48

您应该使用var_dump($matches);然后您将看到^(a)$|^(b)$结果为两个组,而不是包含'a‘或'b’的1组。这意味着您应该将if-语句更新为类似于if ($matches[1] == 'FL3' || $matches[5] == '25')的语句。

显然,我不知道您的其余代码;但是我不会像这样混合多个regexp;相反,我会将它分成两个独立的if-语句:

代码语言:javascript
复制
if (preg_match(FL...))
    $url = '...';
elseif (preg_match(25))
    $url = '...';
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31143023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档