我试图构建一个将PHP正则表达式模式:默认值,如果模式不匹配
- 捕捉“的OpenID”如果测试字符串是“登录/ OpenID的”
- 会用如果测试字符串只是“登录”(没有结尾的斜杠),则为“index”。
login(?:/(。+))? - 这将捕获斜线后的任何内容,并且它工作正常。
但是,如果模式不匹配(即没有斜线),我可以建立一个正则表达式来提供“默认”值。
请不要建议解决方法,我只需要一个模式,如果它是所有可能的。
谢谢!
我试图构建一个将PHP正则表达式模式:默认值,如果模式不匹配
login(?:/(。+))? - 这将捕获斜线后的任何内容,并且它工作正常。
但是,如果模式不匹配(即没有斜线),我可以建立一个正则表达式来提供“默认”值。
请不要建议解决方法,我只需要一个模式,如果它是所有可能的。
谢谢!
不,正则表达式只能匹配那里的文本,而不是“发明”新文本(例如默认值)。所以你不能只用一个正则表达式。
你需要一个if
声明:
if (preg_match('%login(?:/(.+))?%', $subject, $regs)) {
$result = $regs[1];
} else {
$result = "index";
}
基本上,您正试图捕获源文本中不存在的组。我认为单靠一个正则表达式是不可能的。
我认为你唯一的机会是直接在php中实现“index”值的逻辑。