4
/url?q=http://it.wikipedia.org/wiki/Spider-Man_(film)&sa=U&ei=iavVUKuFGsrNswbz74GQBA&ved=0CBYQFjAA&usg=AFQjCNEth5YspFPWp6CInyAfknlEvVgIfA

我需要得到公正

http://it.wikipedia.org/wiki/Spider-Man_(film)

我试过了,\?q=(.*)& 但它考虑了最后一次出现&,所以我得到了

http://it.wikipedia.org/wiki/Spider-Man_(film)&sa=U&ei=iavVUKuFGsrNswbz74GQBA&ved=0CBYQFjAA

http://rubular.com/r/yBiGIMQTUV

4

4 回答 4

12

您需要使用不情愿的匹配来匹配直到第一个&。使用贪婪匹配(即使用*而不是*?),您的模式将匹配尽可能长的字符串以满足完整的模式。

所以使用这个: -

\?q=(.*?)&

或者您也可以使用带有 negated 的字符类,&它匹配除以下每个字符&:-

\?q=([^&]*)

请注意,如果您不希望(.*?)匹配空字符串,则应使用+量词。它匹配1 or more发生。

于 2012-12-22T13:45:35.423 回答
2

您只需要使*操作员变得懒惰,然后在?其后添加一个即可。所以它会是.*?

懒惰(或非贪婪)意味着将在第一次出现该匹配后停止,而不是最后一次。

于 2012-12-22T13:46:11.303 回答
1

尝试:

\?q=([^&]+)

并捕获第一组。

于 2012-12-22T13:45:55.613 回答
0

如果你在 python 中,那么sub(r'(\/url\?q\=)|[&][\S]*','',url)应该做你的工作

于 2012-12-22T13:53:08.390 回答