Участвам в правенето на проект, който изисква премахване на URL адреси
Има ли добър регекс за съвпадение на всеки URL адрес в Ruby 1.8.7?
ПС - имам такъв
/(?i)b((?:[a-z][w-]+:(?:/{1,3}|[a-z0-9%])|wwwd{0,3}[.]|[a-z0-9.-]+[.][a-z]{2,4}/)(?:[^s()<>]+|(([^s()<>]+|(([^s()<>]+)))*))+(?:(([^s()<>]+|(([^s()<>]+)))*)|[^s`!()[]{};:"".,<>?«»“”‘’])/* )/x
Регексът е на http://www.rubular.com/r/UFDveGLNGt с няколко примерни низове Как мога да съвпадна с уебсайтове като fb.me или goo.gl или google.com?
Отговори:
0 за отговор № 1Какво относно:
require "uri"
URI.regexp
Това се оценява на:
/
([a-zA-Z][-+.a-zA-Zd]*): (?# 1: scheme)
(?:
((?:[-_.!~*"()a-zA-Zd;?:@&=+$,]|%[a-fA-Fd]{2})(?:[-_.!~*"()a-zA-Zd;/?:@&=+$,[]]|%[a-fA-Fd]{2})*) (?# 2: opaque)
|
(?:(?:
//(?:
(?:(?:((?:[-_.!~*"()a-zA-Zd;:&=+$,]|%[a-fA-Fd]{2})*)@)? (?# 3: userinfo)
(?:((?:(?:[a-zA-Z0-9-.]|%hh)+|d{1,3}.d{1,3}.d{1,3}.d{1,3}|[(?:(?:[a-fA-Fd]{1,4}:)*(?:[a-fA-Fd]{1,4}|d{1,3}.d{1,3}.d{1,3}.d{1,3})|(?:(?:[a-fA-Fd]{1,4}:)*[a-fA-Fd]{1,4})?::(?:(?:[a-fA-Fd]{1,4}:)*(?:[a-fA-Fd]{1,4}|d{1,3}.d{1,3}.d{1,3}.d{1,3}))?)]))(?::(d*))?))? (?# 4: host, 5: port)
|
((?:[-_.!~*"()a-zA-Zd$,;:@&=+]|%[a-fA-Fd]{2})+) (?# 6: registry)
)
|
(?!//)) (?# XXX: "//" is the mark for hostport)
(/(?:[-_.!~*"()a-zA-Zd:@&=+$,]|%[a-fA-Fd]{2})*(?:;(?:[-_.!~*"()a-zA-Zd:@&=+$,]|%[a-fA-Fd]{2})*)*(?:/(?:[-_.!~*"()a-zA-Zd:@&=+$,]|%[a-fA-Fd]{2})*(?:;(?:[-_.!~*"()a-zA-Zd:@&=+$,]|%[a-fA-Fd]{2})*)*)*)? (?# 7: path)
)(?:?((?:[-_.!~*"()a-zA-Zd;/?:@&=+$,[]]|%[a-fA-Fd]{2})*))? (?# 8: query)
)
(?:#((?:[-_.!~*"()a-zA-Zd;/?:@&=+$,[]]|%[a-fA-Fd]{2})*))? (?# 9: fragment)
/x
Това вероятно ще е по-добре от всичко, което можем да измислим тук (в противен случай обмислете да го изпратите ruby
).