【问题标题】:Perl Regex URL contains string but not similar stringPerl 正则表达式 URL 包含字符串但不是相似的字符串
【发布时间】:2013-04-24 12:36:25
【问题描述】:

我需要为 Perl 编写正则表达式,以便它匹配 /contact(以及 /contact/talk 等之外的所有内容)。

但我也有/contacts 的网址,所以我希望它跳过这个。

到目前为止,我只能为完全匹配或为

编写代码

所以大致如下:

if ($uri =~ m/contact/i ) {
   ## Redirect somewhere
}

这也会重定向 /contacts 中的所有内容,尽管这是我正在努力的地方。

【问题讨论】:

  • URI 应该区分大小写(至少是路径部分),不是吗?

标签: regex perl


【解决方案1】:
if ($uri =~ m!/contact(?:/|$)!) {
  #
}

【讨论】:

    【解决方案2】:
    if ($uri =~ m/\/contact(?:$|\/)/i ) {
      ## Redirect somewhere
    }
    

    将匹配/contact,因为$,以及类似/contact/...的所有内容

    【讨论】:

      【解决方案3】:

      \b 是单词边界标记,可防止此匹配出现在单词中间:

      if ($uri =~ m|\bcontact\b|i ) {
         ## Redirect somewhere
      }
      

      我会将它添加到开头和结尾,因此您也不匹配 foocontact。或者您可以确保在联系之前使用斜线。

      if ($uri =~ m|/contact\b|i ) {
         ## Redirect somewhere
      }
      

      【讨论】:

        【解决方案4】:
        /^\/contact\//
        

        涉及一些猜测 - 您的网址似乎以 /contact 开头,如果不是,请删除初始插入符号。

        【讨论】:

          【解决方案5】:

          试试:

          echo -e "/contacts/qqq\n/contact\n/contact/talk\n/ConTact\n/contactx/"|
          perl -ne 'm{/contact(?:/|$)} and print'
          

          输出:

          /contact
          /contact/talk
          

          【讨论】:

          • 是的.. 我在 5 分钟前发布了那个:/
          • @Loamhoof: :) 抱歉,检查结果需要时间...我认为解决这个问题并没有太大的差异...
          猜你喜欢
          • 2011-07-22
          • 1970-01-01
          • 2014-03-23
          • 2016-04-21
          • 1970-01-01
          • 1970-01-01
          • 2011-06-27
          • 2012-05-11
          • 1970-01-01
          相关资源
          最近更新 更多