php - 如果模式不匹配,正则表达式中的默认值

标签 php regex default-value

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

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

登录(?:/(.+))? - 这将捕获斜线之后的任何内容,并且效果很好。

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

请不要提出解决方法,我只需要一个模式(如果可能的话)。

谢谢!

最佳答案

不,正则表达式只能匹配现有文本,而不能“发明”新文本(例如默认值)。所以你不能单独使用正则表达式来做到这一点。

您需要一个 if 语句:

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

关于php - 如果模式不匹配,正则表达式中的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299004/

相关文章:

php - PHP 中的 JavaScript 风格包装

php - 如何查询从单个字符串提取的多个术语的数据库

javascript - 给定一个全名变量,如何仅使用 JS 返回名字+姓氏首字母

php - 了解 php 命令行脚本路径的可靠方法是什么?

c - 使用 Regex (POSIX) 在 #ifdef 语句外查找 printf() 调用

php - 尝试使用 preg_match_all 将 4 个或更多字符的单词与 3 个或更少字符的单词分组

javascript - 是否有 css 属性的默认值列表? (所以我可以在js中为它们创建一个排除数组)

mysql - 为什么 MySQL 中的文本列不能有默认值?

C# 如何设置自动属性的默认值?

php - PHP 7.0.11 中的 BUG,FILTER_FLAG_NO_RES_RANGE