【问题标题】:Preg_match regex helpPreg_match 正则表达式帮助
【发布时间】:2009-10-05 03:03:29
【问题描述】:

您好,我需要一些帮助。

这是现有的 preg_match 代码:

preg_match("/(\/)([0-9]+)(\/?)$/", $_SERVER["REQUEST_URI"], $m);

它可以很好地检测以下 URI 字符串中的post_id

http://www.example.com/health-and-fitness-tips/999/

我认为背景应该足够了。

我正在将 999post_id 更改为 how-do-I-lose-10kg-in-12-weeks', thepost_title`,并且需要更改 pre_match 正则表达式以检测新字符串。

我的第一个想法是将 [a-z]- 添加到正则表达式的末尾,从而形成以下正则表达式:

"/(\/)([0-9][a-z]/-+)(\/?)$/"

可能就这么简单?如果不是,上面有什么问题?

【问题讨论】:

  • 我建议首先剥离协议和域名,这样您就只剩下相对 url,然后使用explode 函数在斜杠字符上拆分字符串。这似乎比使用正则表达式更简单。
  • 我认为“我正在更改 999”开头的行的标记出现了混淆。你可能有一个太多或一个太少的反引号,我想知道如果你修复它,那条线的意义是否会改变。

标签: php regex preg-match


【解决方案1】:

不完全是:([0-9][a-z]/-+) 是“一个数字,后跟一个字母,后跟至少一个破折号。”

你想要([-0-9a-z]+)

【讨论】:

    【解决方案2】:

    我只会使用\w:

    preg_match('!/([-\w]+)/?$!', $_SERVER['REQUEST_URI'], $m);
    

    来自Character Classes or Character Sets

    \w代表“字字符”, 通常[A-Za-z0-9_]。注意 包含下划线和 数字。

    【讨论】:

      【解决方案3】:

      \w代表单词,可以是大写和小写字母A到Z和a到z,数字0到9或_。相当于[A-Za-z0-9_]。你可以在这里测试online tester

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        • 1970-01-01
        相关资源
        最近更新 更多