【问题标题】:Regex for my query string matches only one value我的查询字符串的正则表达式仅匹配一个值
【发布时间】:2016-10-28 17:34:10
【问题描述】:

请帮助我创建好的正则表达式。我有这样一个字符串: 'text&variable=tekst2&categories=metal;wood&author:elvis;arnold' 我需要将所有类别作为分隔字符串检索,因此结果应该是 2 个字符串:'metal''wood'。 如果是三个或四个类别,则结果应该是三个或四个单独的字符串。

我创建了我的reges,但它只给出了一个字符串。

/(?<=&categories=).*?([^;&]+)/

在线演示在那里: https://regex101.com/r/G6pRUQ/2

如何获得可以提供所有类别的正则表达式?

【问题讨论】:

    标签: regex query-string pcre


    【解决方案1】:

    将类别匹配为多个匹配项的 PCRE 正则表达式,使用

    (?:\G(?!\A);*|[&?]categories=)\K[^;&]+
    

    请参阅regex demo

    详情

    • (?:\G(?!\A);*|[&amp;?]categories=) - 匹配 &amp;?categories=,或上一次成功匹配的结尾和 0+ 个分号
    • \K - 省略目前匹配的文本
    • [^;&amp;]+ - 除;&amp; 之外的1 个或多个字符。

    【讨论】:

      【解决方案2】:

      我不确定您使用的是哪种语言,但在 Java 中我会选择以下代码:

      String str = "text&variable=tekst2&categories=metal;wood&author:elvis;arnold";
      Pattern pattern = Pattern.compile("&categories=(.*?)&");
      Matcher matcher = pattern.matcher();
      ArrayList<String> categories = new ArrayList<>();
      while(matcher.find()){
          categories.add(matcher.group(1));
      }
      

      请检查您使用的语言的语法。但基本逻辑和上面类似。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-02
        相关资源
        最近更新 更多