|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Возвращаясь к регулярным выражениям |
|
Возвращаясь к регулярным выражениям
|
Новый участник Сообщения: 4 |
Профиль | Отправить PM | Цитировать Привет всем!
Помогите разобраться с довольно популярным выражением для проверки URL: ----------------- ~^(??:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}(?::[a-z0-9_-]{1,32})?@)?)? * *(?: * * * *(?:[a-z0-9-]{1,128}\.)+ * * * *(?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0) * * * *(??!0[^.]|255)[0-9]{1,3}\.){3} * * * *(?!0|255)[0-9]{1,3} * * ) * * (?:/[a-z0-9.,_@%&?+=\~/-]*)? * * (?:#[^ '\"&<>]*)? $~i ----------------------- Я его немного отформатировал... *Здесь все понятно, пока я не добираюсь до опережающих негативных проверок. Никак не соображу, зачем они? Причем даже их начинку толком не разберу, что за '0' и '255' в url? Назначение последних двух строк выражения понятны, но отсутствие таких символов как '![]{}|' в первой из них, тоже объяснить не могу? Кто нибудь, может подсказать что нибудь по этим вопросам? |
|
Отправлено: 12:35, 02-07-2004 |
Старожил Сообщения: 236
|
Профиль | Отправить PM | Цитировать Cryon
в юрл от 0 до 255 потому что юрл может быть как ип адрес так и привязаное имя к этому ипу. а проверка на спецсимволы потому как домен не может содержать такие имена, типа https://w[w]w.}{ruker.r() u это международный стандарт. |
Отправлено: 12:52, 02-07-2004 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Хм, хорошо...
Действительно с IP я стормозил, но все равно не понимаю, как это должно работать... Вот здесь мы определили домен: (?:[a-z0-9-]{1,128}\.)+ (?:com|net|org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2}) А здесь, при необходимости '|' подсавим IP вместо домена: |(?!0)(??!0[^.]|255)[0-9]{1,3}\.){3} (?!0|255)[0-9]{1,3} Кстати, не совсем понятно как тут использована операция |, т.е. смысл ясен - выбрать домены ИЛИ ip, но она же работает между ближайшими группами, т.е. (...)(var1)|(var2)(...), а судя по коду, тот же домен состоит из нескольких групп. Тогда получается: что в выборе участвуют только (net)|(66.79.174.172). Как же так? Интересно, почему для IP нельзя было записать так: (?:[0-9]{1,3}\.){3}[0-9]{1,3} И возвращаясь к строке после домена: (?:/[a-z0-9.,_@%&?+=\~/-]*)? она озватывает весь остаток до якоря, НО, шаблон не содержит '![]{}|' и пробел! Хотя те же мелкософтовские сервера всё это используют, т.е. существуют реальные примеры ссылок! Пока! Добавлено: Извеняюсь по поводу "(var1)|(var2)", обнаружил, что ператор '|' работает в пределах всей группы... |
Отправлено: 15:43, 02-07-2004 | #3 |
Старожил Сообщения: 236
|
Профиль | Отправить PM | Цитировать у меня вопрос на каком языке представлен это "популярное выражение проверки url" ?
НО, шаблон не содержит '![]{}|' и пробел! Хотя те же мелкософтовские сервера всё это используют, т.е. существуют реальные примеры ссылок! на сколько я знаю, данные перед отправкой кодируются в по 16ричной системе и затем передаются, пробел превратится в %20 и т.п. просто интересно посмотреть как может коректно обработаться в глобальной сети астро-нета ссылка вида: думаю браузер будет демонстрировать свое чувство юмора - 404 [s]Исправлено: FADE, 17:15 2-07-2004[/s] |
Отправлено: 17:09, 02-07-2004 | #4 |
Новый участник Сообщения: 4
|
Профиль | Отправить PM | Цитировать Угу кодируются, но фишка в том, что когда человек вводит ссылку (скажем при регистрации на форуме) он будет её вводить так:
"www.xtec.es/ ~imagrans/manga.jpg" или так: "http://www.realist.fatal.ru/3[1].jpg" В последнем случае скобки не приводятся к виду %XX при отправке. |
|
Отправлено: 17:34, 02-07-2004 | #5 |
Старожил Сообщения: 236
|
Профиль | Отправить PM | Цитировать да, действительно "http://www.vv.fatal.ru/3[1].jpg"
не достаточно защищено криптографически, но коректно ли пройдет проверка если записать так: (?:#[^ '\"&[]<>]*)? или так (?:#[^ '\"&][<>]*)? по мне так мне кажется нужно проверять не только ASCII символы в обычной кодировке, но и в десятичной и других. пример П. С., обратную ковычку кстати тоже нужно проверять я думаю. ----- у меня вопрос на каком языке представлен это "популярное выражение проверки url" ? Добавлено: а вот вам пример анчера использующий в качестве криптографической разметки обратную ковычку через протокол about: например.. Добавлено: или классический пример для этого форума если б переменную forum не обозначили как только [1-n], где n=количеству форумов, то думаю пример работал так же как и в том примере что выше.. [s]Исправлено: FADE, 20:06 2-07-2004[/s] |
Отправлено: 19:37, 02-07-2004 | #6 |
Старожил Сообщения: 236
|
Профиль | Отправить PM | Цитировать а еще хорошо бы проверить верхний и нижний регистр...
например иногда <img> не работает, а <ImG> пройдет.. |
Отправлено: 18:13, 03-07-2004 | #7 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Обсуждение FAQ'а (Ча.Во) по регулярным выражениям | Creat0R | AutoIt | 4 | 18-09-2009 10:01 | |
Возвращаясь к мостам | kapitanvagin | Материнские платы и память | 19 | 08-10-2008 22:03 | |
PHP: помогите с регулярным выражением | ams | Вебмастеру | 3 | 01-08-2005 15:00 | |
Вернемся к регулярным выражениям | FADE | Вебмастеру | 2 | 04-07-2004 19:18 | |
Вопрос по регулярным выражениям | vadimiron | Вебмастеру | 5 | 13-03-2004 20:12 |
|