Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 18, 2011 08:58:42

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

Всем привет. Не нашёл более подходящего раздела, пишу сюда.

Написал регулярку для разбора URL, не знаю, кто-то уже такое делал, но я не нашёл.
Задача - извлекать из URL всё что можно: схему, имя, пароль, хост, порт и т.д.

\A
(?: (?P<scheme> \w+) :// )?
(?: (?P<user> [\w_]+) [:@] )?
(?: (?P<password> (?<=:) [\w%_]+) @ )?
(?: (?P<host> [\w._-]+?) (?:[/:?#]|\Z) )?
(?: (?P<port> (?<=:) \d+) (?:[/:?#]|\Z) )?
(?: (?P<path> (?<=/) [^?#]*) (?:[?#]|\Z) )?
(?: (?P<parameters> (?<=\?) [^#]+) (?:[#]|\Z) )?
(?: (?P<anchor> (?<=\#) .+) \Z )?
Мне нужно, что-бы если нет какого-то необязательного элемента, например, порта, всё остальное-бы работало как надо. Я тестил, работает. Вас прошу опытным взглядом проверить, исправить и дополнить моё творения, ибо с регулярками познакомился недавно.



Офлайн

#2 Авг. 18, 2011 11:00:20

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Корректность Регулярного выражения

Зачем это творчество?



Офлайн

#3 Авг. 18, 2011 12:36:40

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

А чем например urllib2.urlparse неугодил ?

>>> urllib2.urlparse.urlparse('http://python.su/forum/viewtopic.php?id=12367')

ParseResult(scheme='http', netloc='python.su', path='/forum/viewtopic.php', params='', query='id=12367', fragment='')



Отредактировано (Авг. 18, 2011 12:37:00)

Офлайн

#4 Авг. 18, 2011 12:42:43

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

А на кой он мне упал?



Офлайн

#5 Авг. 18, 2011 12:51:29

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Корректность Регулярного выражения

Месье — велосипедист!



Офлайн

#6 Авг. 18, 2011 16:46:26

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

Вот, любйутесь!

\A(?:(?P<scheme>[^:/?#]+)://)?
(?:(?P<username>[^:@/?#]+)(?::(?P<password>[^/?#]+))?@)?
(?:(?P<host>[^:/?#]+))
(?::(?P<port>[^@/?#]+))?
(?:(?P<path>/[^?#]*))?
(?:\?(?P<params>[^#]*))?
(?:\#(?P<anchor>.*))?



Офлайн

#7 Авг. 18, 2011 18:39:26

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

вопрос “зачем” остаётся открытым …

Офлайн

#8 Авг. 18, 2011 22:01:49

d1ffuz0r
От: Moscow
Зарегистрирован: 2011-03-25
Сообщения: 127
Репутация: +  5  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

atomAltera
Вот, любйутесь!
любуйся http://pastebin.com/6ZC14Bs9

Офлайн

#9 Авг. 19, 2011 09:12:45

atomAltera
От:
Зарегистрирован: 2011-07-27
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

d1ffuz0r
любуйся http://pastebin.com/6ZC14Bs9
Ну я рад, мне по своему хочется…



Отредактировано (Авг. 19, 2011 09:24:20)

Офлайн

#10 Авг. 19, 2011 12:11:49

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Корректность Регулярного выражения

atomAltera
Ну я рад, мне по своему хочется…
Ну… все ополчились против этой регулярки вовсе не из вредности и не для того, чтобы ты не писал свой собственный код, просто переиспользование кода - один из основных механизмов, который используется при написании программ. К примеру, модуль urllib - один из первых стандартной библиотеки, и эти много лет использования гарантируют стабильность его работы, в то время, как эта регулярка потенциально может содержать ошибки (с намного большей вероятностью, чем urllib).



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version