【问题标题】:Redirect the Url pattern ending with specialcharacter and number重定向以特殊字符和数字结尾的 Url 模式
【发布时间】:2016-08-03 15:32:35
【问题描述】:

我的要求是重定向我的一些网址,其中包含一个 8 位数字和一个特殊字符。

示例网址如下所示

www.example.com/anything-here/hello-12345677

www.example.com/anything-here/again-here/again-hello-12543598

www.example.com/anything-here/hello-12345677

我在 php 中使用 pregmatch 来查找包含“-”和 8 位数字的模式。

我尝试了以下代码,但它不适合我。我的模式正确吗?

$result = preg_match("#.*/-\d{8}$#i", request_uri());

【问题讨论】:

  • 特殊字符是什么?我只看到数字。
  • HI Chris "-" 是特殊字符,后跟 8 位数字。例如:“-12345678”
  • 哦,可能想改写and a special character at the end。您的任何 URL 中都没有 /-。这就是为什么你没有得到匹配。例如。 -\d{8}$ 就足够了 - 然后在你的字符串末尾有 8 个数字。
  • 所以我只需要 -\d{8} 对吧?
  • 如果使用 $ 否则它是 - 和字符串中某处的 8 个数字。你也不希望$result 有匹配的文本,对吧?

标签: php regex preg-match


【解决方案1】:

以下模式将匹配任何带有破折号后跟 8 位数字的 URL。末尾带有特殊字符的 URL 将不匹配。

$result = preg_match("/.*-\d{8}$/i", request_uri());

演示在这里:

Regex101

【讨论】:

  • .*i 实际上并不需要。
  • @Vishnu 最后要匹配哪些特殊字符?
  • 实际上 url 以“-”和 8 位数字结尾。但是任何东西都可以出现在“-”和 8 位数字之前。像anything-12345678、any-thing-12345678、any^thing-12345678。我正在使用 php 5.6
  • 你确定我的模式不符合这个要求吗?
【解决方案2】:

您使用的正则表达式的问题是您将破折号的模式和八位数字直接放在正斜杠之后,并且在您展示的所有示例中,斜杠和破折号之间还有其他字符。

//                                    ***** <---These chars don't match your pattern
$url = "www.example.com/anything-here/hello-12345677";
//                    .*             /     -\d{8}  $

如果你想确保在-\d{8}之前的url中有一个斜杠,你可以在它之前添加另一个通配符(.*/.*-\d{8}$),或者如果没有关系,那么斜杠和通配符都不是是必须的。 (-\d{8}$)。

【讨论】:

    【解决方案3】:

    $result = substr(request_uri(), strpos(request_uri(), "-") + 1);

    来源:Get everything after a certain character

    【讨论】:

    猜你喜欢
    • 2020-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 2022-07-21
    • 2012-08-20
    • 2022-01-03
    • 1970-01-01
    相关资源
    最近更新 更多