2011-03-14 75 views
0

我试图构建一个将PHP正则表达式模式:默认值,如果模式不匹配

  1. 捕捉“的OpenID”如果测试字符串是“登录/ OpenID的”
  2. 会用如果测试字符串只是“登录”(没有结尾的斜杠),则为“index”。

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

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

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

谢谢!

回答

2

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

你需要一个if声明:

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

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

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