如果pattern不匹配,则为正则表达式中的默认值

时间:2011-03-14 13:11:43

标签: php regex default-value

我正在尝试构建一个PHP regexp模式:

  1. 如果测试字符串为“login / openid”
  2. ,则捕获“openid”
  3. 如果测试字符串只是“登录”(没有斜杠),则会使用“index”。
  4. 登录(?:/(+)。)? - 这将捕获斜线之后的任何内容,并且工作正常。

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

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

    谢谢!

2 个答案:

答案 0 :(得分:2)

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

您需要if声明:

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

答案 1 :(得分:1)

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

我认为你唯一的机会是直接在php中实现“index”值的逻辑。