2015-02-02 3 views
-3

У меня есть this regex, и он захватывает вещи в одной строке, если после ссылки нет места.Regex захватывает символы на одной строке

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

(?:http\:\/\/)?(?:www\.)?ama?zo?n\.(?:com|ca|co\.uk|co\.jp|de|fr)/(?:exec/obidos/ASIN/|o/|gp/product/|(?:(?:[^"\'/]*)/)?dp/|)(B[A-Z0-9]{9})(?:(?:/|\?|\#)(?:[^"\'\s]*))? 

Мой ожидаемый вход

[link](http://www.amazon.com/dp/B00CTUER1M) 

Here is[a cool toy](http://www.amazon.com/dp/B00CTUER1M/ref=gb1h_img_e-4_8722_fb086345?smid=ATVPDKIKX0DER)!dddd fdsfsdfds 

Я ожидаю, что выход будет

[link](http://www.amazon.com/dp/B00CTUER1M?tag=affcode-20) 

Here is[a cool toy](http://www.amazon.com/dp/B00CTUER1M?tag=affcode-20)!dddd fdsfsdfds 

Однако для второго я получаю

Here is[a cool toy](http://amazon.com/dp/B00CTUER1M/?tag=affcode-20 fdsfsdfds 
+0

Так в чем ваш вопрос? – senshin

+0

предоставляют пример ввода вместе с ожидаемым выходом. –

ответ

2

Из-за внешнего вида вы оставили закрытую скобку ) из окончательного отрицательного класса символов.

# (?:http://)?(?:www\.)?ama?zo?n\.(?:com|ca|co\.uk|co\.jp|de|fr)/(?:exec/obidos/ASIN/|o/|gp/product/|(?:(?:[^"'/]*)/)?dp/|)(B[A-Z0-9]{9})(?:(?:/|\?|\#)(?:[^"'\s)]*))? 

(?: http://)? 
(?: www \.)? 
ama? zo?n \. 
(?: 
     com 
    | ca 
    | co \. uk 
    | co \. jp 
    | de 
    | fr 
) 
/
(?: 
     exec/obidos/ASIN/ 
    | o/ 
    | gp/product/ 
    | (?: 
      (?: [^"'/]*) 
     /
    )? 
     dp/ 
    | 
) 
(B [A-Z0-9]{9})    # (1) 
(?: 
     (?:/| \? | \#) 
     (?: [^"'\s)]*)    # <- Add ')' to negative class 
)? 
Смежные вопросы