正则表达式不匹配我的字符串的第一次出现
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]+)\&?
应该做这份工作
在这个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]+)\&?
应该做这份工作