2017-02-21 8 views
2

То, что я пытаюсь совместить до первого появления & met. Сейчас он соответствует только последнему вхождению &.Регулярное совпадение: совпадение до первого встречного встречного

Моя регулярное выражение

(?!^)(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-Boxer-4K-проекторы --- 4820052

Click for the codebase.

ответ

3

Используйте нежадным режим, как это:

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

В нежидком режиме (или в ленивом режиме) совпадение будет как можно короче.

Если вы хотите избавиться от О.Т. & то просто обернуть его в опережения группе, поэтому он не будет в матче, как это:

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

Или вы могли бы оптимизировать регулярное выражение @apsillers предложил в комментарии пыльник нравится:

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

Примечание:& не особый характер, так что вам не нужно, чтобы избежать его,

+0

Есть ли способ избавиться от последнего '&'? –

+2

@SamKirklandWA Если вы не хотите соответствовать финальному '&', вы можете сделать '/ (?! ^) (Http [^ \\ &] +) /' вместо (т. Е. Сопоставить все, что не является обратным слэшем или амперсанд.) В этом случае жадный/ленивый вопрос не имеет значения, потому что после последней группы нет ничего. – apsillers

+0

@SamKirklandWA посмотреть обновление! –

 Смежные вопросы

  • Нет связанных вопросов^_^