【问题标题】:Check for url slash count pattern检查 url 斜杠计数模式
【发布时间】:2016-09-12 06:30:47
【问题描述】:

我正在尝试编写一个正则表达式来匹配无效的 url 模式

我想匹配以下模式:

/article/test-string/

上面是无效的url,但下面是有效的

/article/abc/test-string/ and /article/xyz/abc/test-string/

我想匹配那些在文章斜线后只有一个值的。 请帮忙,我正在尝试使用以下,但它匹配所有:

/article/(.*)/$

【问题讨论】:

    标签: php regex


    【解决方案1】:

    .* 匹配 0 个或多个任意字符,因此 /article/(.*)/$ 将匹配所有包含 /article/ 的 URI。

    您可以使用此正则表达式仅验证/article/ 之后的一个非斜线组件:

    $re = '~^/article/[^/]*/$~';
    
    • [^/]* # 匹配 0 个或多个不是 / 的任何字符
    • /$ #最后匹配/
    • ~ 用作正则表达式分隔符以避免转义 /

    【讨论】:

      【解决方案2】:
      ~^/article/(.*)+/(.*)/$~gm ^ 在行首断言位置 /article/ 匹配字符 /article/ 字面意思(区分大小写) 第一捕获组 (.*)+ 量词:+一次到无限次,尽可能多次,按需回馈[贪心] 注意:重复捕获组将仅捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置一个捕获组以捕获所有迭代或使用非捕获组 .* 匹配任何字符(换行符除外) 量词:*在零到无限次之间,尽可能多次,按需回馈[贪心] / 匹配字符 / 字面意思 第二个捕获组 (.*) 量词:*在零到无限次之间,尽可能多次,按需回馈[贪心] 注意:重复捕获组将仅捕获最后一次迭代。如果您对数据不感兴趣,请在重复组周围放置一个捕获组以捕获所有迭代或使用非捕获组 .* 匹配任何字符(换行符除外) 量词:*在零到无限次之间,尽可能多次,按需回馈[贪心] / 匹配字符 / 字面意思 $ 在行尾断言位置 g 修饰符:全局。所有比赛(第一场比赛不返回) m 修饰符:多行。导致 ^ 和 $ 匹配每行的开始/结束(不仅是字符串的开始/结束)
      $re = "~^/article/(.*)+/(.*)/$~m"; 
      $str = "/article/xyz/abc/test-string/\n/article/test-string/"; 
      
      preg_match_all($re, $str, $matches);
      

      来源https://regex101.com/

      【讨论】:

      • 感谢 Abhijit,这个解释真的很有用。'~^/article/[^/]*/$~'; 解决了我的目的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 2010-10-02
      • 1970-01-01
      • 2015-08-11
      • 2015-03-26
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多