【问题标题】:php REGEX to match custom url structure issuephp REGEX 匹配自定义 url 结构问题
【发布时间】:2013-04-11 15:35:05
【问题描述】:

我用()[]的很多变体尝试了下面的模式,但我无法实现我的目标。

$pattern = '/^http:\/\/www.mydomain.p.ht\/?[\p{L}\p{N}\-]{0,36}\/?[\p{L}\p{N}\-]{0,51}\/?[\p{L}\p{N}\-]{0,101}$/';

我的目标是:匹配我需要的 url 结构

  1. http://www.mydomain.p.ht
  2. 0 或 1 个/ 斜线字符
  3. utf-8 可识别字母、数字和破折号字符。总长度最小 0,最大 36
  4. 0 或 1 个/ 斜线字符
  5. utf-8 可识别字母、数字和破折号字符。总长度最小 0,最大 51
  6. 0 或 1 个/ 斜线字符
  7. utf-8 可识别字母、数字和破折号字符。总长度最小 0,最大 101。最后不能有 / 斜杠字符。

目前http://www.mydomain.p.ht/1234561-234561234561234-56123456123456şğ 匹配,但它不应该因为1234561-234561234561234-56123456123456şğ 部分有超过 36 个字符。

你能纠正我的模式吗?

【问题讨论】:

    标签: php regex url preg-match match


    【解决方案1】:

    只是纠正正则表达式本身

    /^http:\/\/www.mydomain.p.ht(\/|\/[\p{L}\p{N}\-]{1,36}(\/|\/[\p{L}\p{N}\-]{1,51}(\/|\/[\p{L}\p{N}\-]{1,101})?)?)?$/
    

    问题是使/ 可选允许正则表达式组合多个 [\p{L}\p{N}-] 组以匹配超过 36 或 51 个字符等等。我做了一个假设,你不能拥有http://www.mydomain.p.ht//1234561-234561234561234-56123456123456şğ,请注意双重/

    如需更多信息,我强烈推荐http://www.regular-expressions.info/

    【讨论】:

    • 非常感谢。黄金射门。 +1额外解释。 5分钟后接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多