2017-02-21 4 views
2

Was ich versuche, ist bis zum ersten Auftreten von & übereingestimmt. Im Moment stimmt es nur mit dem letzten Vorkommen & überein.Regex: Match bis zum ersten Auftreten erfüllt

Mein regulärer Ausdruck ist

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

Und ich versuche, gegen diesen Text entsprechen:

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

Was ich brauche, ist:

http://business.itbusinessnet.com/article/WorldStage-Supports-Massive-4K-Video-Mapping-at-Adobe-MAX-with -Christie-Boxer-4K-Projektoren --- 4820052

Click for the codebase.

Antwort

3

Verwenden Sie den nicht-gierigen Modus wie folgt aus:

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

Im nicht gierigen Modus (oder Lazy Mode) wird die Übereinstimmung so kurz wie möglich sein.

Wenn Sie die & ot loswerden wollen, dann wickelt es nur in einer Vorschaugruppe, so dass es nicht in dem Spiel wird so sein:

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

Oder Sie könnten den regulären Ausdruck als @apsillers optimieren im Kommentar vorgeschlagen bellow dies mag:

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

Hinweis:& ist kein Sonderzeichen, so dass Sie es nicht entkommen müssen,

+0

Gibt es eine Möglichkeit, das letzte '&' loszuwerden? –

+2

@SamKirklandWA Wenn Sie nicht mit dem finalen '&' übereinstimmen möchten, können Sie stattdessen '/ (?! ^) (Http [^ \\ &] +) /' verwenden (also alles, was kein umgekehrter Schrägstrich ist oder Kaufmännisches Und-Zeichen.) In diesem Fall spielt das gierige/faule Problem keine Rolle, weil es nichts nach der letzten Gruppe gibt. – apsillers

+0

@SamKirklandWA siehe Update! –

Verwandte Themen