2015-08-05 2 views
2

Я написал это регулярное выражение, чтобы помочь мне извлечь некоторые ссылки из некоторых текстовых файлов:Перепишите регулярное выражение без отрицания

https?:\/\/(?:.(?!https?:\/\/))+$

Потому что я использую golang/регулярное выражение LIB, я не могу использовать его, из-за моего отрицания (?!..

Что я хотел бы сделать с этим, это выбрать весь текст из последнего события http/https до конца.

sometextsometexhttp://websites.com/path/subpath/#query1sometexthttp://websites.com/path/subpath/#query2 

=> Вывод: http://websites.com/path/subpath/#query2

Может кто-нибудь помочь мне с решением, я потратил несколько часов, пробуя различные способы воспроизведения того же результата без успеха.

ответ

3

Попробуйте это регулярное выражение: существуют

https?:[^:]*$ 

Regex live here.

+0

Thx для этого у вас есть представление о том, как изменить это регулярное выражение, чтобы я мог получить тот же выбор, но пока он не найдет & type =, или до конца if & type = not exists? – alexsmn

+0

Регулярное выражение не будет работать, если URL имеет ':' 'http: //websites.com/path/subpath/? Q = tsid: 51' – alexsmn

+0

@alexsmn. Извините, не используя отрицание, это то, что я могу получить. Возможно, какой-то пользователь высокого уровня может помочь с этими моментами. –

2

В lookaheads по причине.

Однако, если вы настаиваете на якобы эквивалентной альтернативе, общая стратегия, которую вы можете использовать это:

(?!xyz) 

несколько эквивалентен:

$|[^x]|x(?:[^y]|$)|xy(?:[^z]|$) 

С тем, что, надеюсь, я Жду» t допустите ошибки:

https?:\/\/(?:$|(?:[^h]|$)|(?:h(?:[^t]|$))|(?:ht(?:[^t]|$))|(?:htt(?:[^p]|$))|(?:http(?:[^s:]|$))|(?:https?(?:[^:]|$))|(?:https?:(?:[^\/]|$))|(?:https?:\/(?:[^\/]|$)))*$ 
Смежные вопросы