在这个网址中:
http://example.com/SearchResult-Empty.html?caty[]=12345&caty[]=45678
我正在尝试使用以下正则表达式来抓住caty的第一个出现,应该是“12345”。但是,相反,下面的正则表达式给了我最后一次出现45678.我尝试使用“?”限制器使其非堆栈溢出问题非贪婪,但它不起作用。我怎么能这样做?
^SearchResult(?:.*)(caty)(?:.*)\=([0-9]+)\&?$
答案 0 :(得分:1)
^SearchResult(?:.*)(caty)(?:.*)\=([0-9]+)\&?$
^^
.*
是贪婪的匹配,这意味着它将在caty
而不是第一次出现 last 。您可以通过在输入字符串中提供三个 caty
来检查它,然后它会跳过第一个两个。
.*?
让它变得非贪婪(又名不情愿),这将消耗尽可能少的匹配 - 停止在第一次出现caty
。
答案 1 :(得分:1)
据我所知,有两件事搞砸了你:
^
和$
似乎迫使正则表达式产生不良匹配.*
而不是非贪婪的.*?
SearchResult(?:.*?)(caty)(?:.*?)\=([0-9]+)\&?
应该做的工作