【问题标题】:Regex to match string with five forward slashes正则表达式匹配带有五个正斜杠的字符串
【发布时间】:2020-06-02 00:59:16
【问题描述】:

我想编写一个正则表达式来匹配任何带有 5 个正斜杠的字符串。这是为了匹配 Google Analytics 中的 URL。我以为我已经接近了,但还没有雪茄。这是我想出的:

\/.*\/.*\/.*\/.*\/.*$

但它不匹配任何东西。我该如何纠正?还是不可能?

【问题讨论】:

  • 你能提供一个测试输入吗?此外,.*$ 对我来说似乎毫无意义,因为您似乎没有使用捕获组......为什么不直接关闭它并允许中间字符串匹配?您的特定正则表达式引擎也可能是相关的。
  • 你的正则表达式是什么风格?
  • 你想做什么?你只想要字符串中的正斜杠吗?或者你想要一个肯定有五个正斜杠的字符串?
  • 你需要正好 5 个斜线,所以不多也不少?此外,请提供与预期不符的输入,并让我们知道您的预期和行为方式。

标签: regex


【解决方案1】:

以下正则表达式will work

.*(?:\/.*){5}

解释:

.*             # Any character (except newlines) 0 or more times
   (?:         # Start of non-capturing group
      \/       # Matches `/` literally (is esacped with a backslash)
        .*     # Any character (except newlines) 0 or more times
          )    # End of group
           {5} # The previous group five times

【讨论】:

    【解决方案2】:

    如果你只想要 /aaa/bbb/ccc/ddd/ 之类的东西,这会成功:/[^/]+/[^/]+/[^/]+/[^/]+/ 但是,还有更多需要考虑的事情吗?

    1. 这是唯一接受的格式吗?
    2. 第一个斜杠之前是否可以有任何字符链?
    3. 最后一个斜杠后是否可以有任何字符链?

    如果这个不符合您的需求,您不妨提供一些有效和无效的输入。

    干杯。

    【讨论】:

      【解决方案3】:

      您可以使用“(\w*\W){5}”,因为“\W”用于非单词字符。

      【讨论】:

        【解决方案4】:

        这样简单:

        (/[^/]*){5}
        

        如果斜线之间至少需要一个字符,请将 * 更改为 +。

        【讨论】:

          【解决方案5】:

          我需要提取的链接只有在 Google Analytics 中的 URL 中包含不包括数字和查询的字符串。

          所以,我需要这个网址

          www.site.com/en/rent/cairo/apartments-for-rent/

          并排除这些

          www.website.com/en/buy/apartment-for-sale-in-acacia-compound-new-cairo-947145/
          
            www.website.com/en/buy/apartment-for-sale-in-acacia-compound-new-cairo-947145/?price=1000
          

          【讨论】:

            猜你喜欢
            • 2019-08-26
            • 2021-11-13
            • 2012-11-22
            • 2013-05-15
            • 1970-01-01
            • 1970-01-01
            • 2015-03-15
            相关资源
            最近更新 更多