2017-02-21 344 views
2

我所尝试的是匹配,直到第一次出现&遇到。现在它只匹配最后一次出现的&正则表达式:直到遇到第一个匹配项

我的正则表达式是

(?!^)(http[^\\]+)\& 

而且我想对阵这样的文字:

https://www.google.com/url?rct3Dj & sa3Dt & url3Dhttp: //business.itbusinessnet.com/article/WorldStage-Supports-Massive-4K-Video-Mapping-at-Adobe-MAX-with-Christie-Boxer-4K-Projectors---4820052 & ct3Dga & cd3DCAEYACoTOTEwNTAyMzI0OTkyNzU0OTI0MjIaMTBmYTYxYzBmZDFlN2RlZjpjb206ZW46VVM & usg3DAFQjCNE6oIhIxR6qRMBmLkHOJTKLvamLFg

我需要的是:

http://business.itbusinessnet.com/article/WorldStage-Supports-Massive-4K-Video-Mapping-at-Adobe-MAX-with -Christie义和团-4K投影机--- 4820052

Click for the codebase.

回答

3

使用非贪婪模式是这样的:

/(?!^)(http[^\\]+?)&/ 
//    ^

在非贪婪模式(或懒惰模式)下,匹配将尽可能短。

如果你想摆脱OT的&然后只是把它包在先行集团,所以它不会是在比赛中是这样的:

/(?!^)(http[^\\]+?)(?=&)/ 
//     ^^^

或者你可以优化正则表达式作为@apsillers在评论所说波纹管是这样的:

/(?!^)(http[^\\&]+)/ 

注:&不是特殊字符,所以你不需要逃避它,

+0

有没有办法摆脱最后的'&'? –

+2

@SamKirklandWA如果你不想匹配最后的'&',你可以做'/(?!^)(http [^ \\&] +)/'来代替(即匹配所有不是反斜线的东西或&符号)。在这种情况下,贪婪/懒惰问题并不重要,因为在最后一组之后什么也没有。 – apsillers

+0

@SamKirklandWA查看更新! –

相关问题