【问题标题】:Default values in regular expressions if pattern does not match如果模式不匹配,则正则表达式中的默认值
【发布时间】:2011-07-15 00:22:08
【问题描述】:

我正在尝试构建一个 PHP 正则表达式模式:

  1. 如果测试字符串是“login/openid”,则捕获“openid”
  2. 如果测试字符串只是“login”(没有尾部斜杠),将使用“index”。

登录(?:/(.+))? - 这将捕获斜线之后的任何内容,并且工作正常。

但是,如果模式不匹配(即没有斜杠),我可以构建一个正则表达式来提供“默认”值吗?

请不要建议解决方法,我只需要一个可能的模式。

谢谢!

【问题讨论】:

    标签: php regex default-value


    【解决方案1】:

    基本上,您正在尝试捕获源文本中不存在的组。我认为仅靠正则表达式是不可能的。

    我认为您唯一的机会是直接在 php.ini 中实现“索引”值的逻辑。

    【讨论】:

      【解决方案2】:

      不,正则表达式只能匹配存在的文本,不能“发明”新文本(例如,默认值)。所以你不能单独使用正则表达式。

      您需要if 声明:

      if (preg_match('%login(?:/(.+))?%', $subject, $regs)) {
          $result = $regs[1];
      } else {
          $result = "index";
      }
      

      【讨论】:

        猜你喜欢
        • 2019-06-01
        • 2022-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多