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

时间:2015-05-12 02:51:24

标签: regex .htaccess url-rewriting

在这个网址中:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

.*?让它变得非贪婪(又名不情愿),这将消耗尽可能少的匹配 - 停止在第一次出现caty

答案 1 :(得分:1)

据我所知,有两件事搞砸了你:

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

应该做的工作