正则表达式不匹配我的字符串的第一次出现

Regex not matching the first occurence of my string

在这个url中:

 http://example.com/SearchResult-Empty.html?caty[]=12345&caty[]=45678

我正在尝试使用以下正则表达式来获取第一次出现的 caty,它应该是“12345”。但是,相反,下面的正则表达式给了我最后一次出现 45678。我尝试使用“?”限制器使其根据其他堆栈溢出问题变得非贪婪,但它不起作用。我该怎么做?

 ^SearchResult(?:.*)(caty)(?:.*)\=([0-9]+)\&?$
^SearchResult(?:.*)(caty)(?:.*)\=([0-9]+)\&?$
                ^^

.* 是贪婪匹配,这意味着它会在 最后一次 出现 caty 而不是第一次出现。您可以通过在输入字符串中提供 three caty 来检查,然后它将跳过第一个 two.

.*? 使其不贪婪(又名 不情愿 ),这将消耗尽可能少的匹配 - 在 处停止第 次出现 caty.

据我所知,有两件事让您感到困惑:

  • ^$ 似乎迫使正则表达式产生错误匹配
  • 您正在使用贪婪 .* 而不是非贪婪 .*?
SearchResult(?:.*?)(caty)(?:.*?)\=([0-9]+)\&?

应该做这份工作