Задавайте вопросы, мы ответим
Вы не зашли.
Задание сделать регулярку для ip Вот такого вида: http://%ip%/path/to/page
Например: http://64.106.42.83/index.php или http://34.62.10.99/page2/
набросал такое
select 'http://54.255.5.255/df.' regexp
'^http[:][/][/](([0-1]?[0-9]{1,2})|([2]?[0-4]?[0-9]?)|([2]?[5]?[0-5]?))[.](([0-1]?[0-9]{1,2})|([2]?[0-4]?[0-9]?)|([2]?[5]?[0-5]?))[.](([0-1]?[0-9]{1,2})|([2]?[0-4]?[0-9]?)|([2]?[5]?[0-5]?))[.](([0-1]?[0-9]{1,2})|([2]?[0-4]?[0-9]?)|([2]?[5]?[0-5]?))([/][.A-Za-z]+)*$';
сказали доделать вот это
В ip-адресе не может встречаться 255. И сделай так, чтобы у тебя не могло
оканчиваться точкой.
вопрос в следующем максимальный ip у нас 253.255.255.255 ?
и как разобраться с точкой и так же как сделать так что бы айпишник не мог оканчиваться на /
Неактивен
научил запрещать / и чуть упростил но с окончанием на точку не разобрался...
^http[:][/][/](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)([/][\].A-Za-z]+)*$
Неактивен
Честно говоря, не понял, почему нельзя 255 в адресе. Вполне можно.
Что значит «айпишних заканчивается на /» — тоже не понял. У Вас
там только числа прописаны. С / начинается path, при этом / — вполне
себе валидный путь к файлу.
Из общих придирок — я бы избавился от дублирования строк: регуляр-
ные выражения и так читать достаточно сложно
((...)\.){3}(...)
Т.е. я бы делал что-то типа
^http://((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/([A-Za-z0-9/_\\-]+)*$
Обратите внимание, что внутренние скобки Ваши я тоже немного
поправил, потому что октет 0101 хоть и является валидным, но
представляет собой число 65, а если Вы хотите поддерживать вось-
меричную нотацию, то тогда надо расширять все остальные поля
тоже
Неактивен
ох загрузили))))))) надо ещё мне теории почитать)))))))))
может через глупую фигню проверяю но все таки ваш вариант тут "компилиться" не хочет
Ваш вариант здесь
Отредактированно Step (23.01.2011 00:48:54)
Неактивен
[silentia] root test > select r, r rlike '^http://((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])/([A-Za-z0-9/_\\-]+)*$' m from r; +----------------------+------+ | r | m | +----------------------+------+ | http://1.2.3.4/blah | 1 | | http://1.2.3.4.5/bla | 0 | | http://1.2.3./blah | 0 | | http:/1.2.3.4/blah | 0 | | http://1000.2.3.4/bl | 0 | +----------------------+------+ 5 rows in set (0.00 sec)
А что касается проверки на сайте PCRE — решите, какие регулярные
выражения Вам нужны, а потом уже пишите их
Неактивен
Присоединюсь к топику , но со своей регуляркой :
select 'https://y.a.ndexf.ri/gggghhh;' REGEXP
'(http|https|ftp)/(www|ftp)*[A-z0-9\-]+\\.([A-z]){2,5}[/]*[A-z0-9\-]';
ну и два вопроса :
1) почему не пускает ?
2) нужно учесть ограничения доменов 2 уровня
спасибо
Неактивен
А почему должен? :)
У Вас написано: протокол, «://», префиксы несколько раз, слово, точка, от двух до пяти букв, итд.
Подставляем. https (ok), :// (ok), префиксов нет (ok), слово y (ok), точка (ok), одна буква (облом).
Неактивен
select 'http://y.andex.ru/gggghhh;' REGEXP
'(http|https|ftp)/(www|ftp)*[A-z0-9\-]+\.([A-z]){2,5}[/]*[A-z0-9\-];
а вот это работает
1)как мне быть со второй точкой ?(y.a.ndexf) что нужно добавить чтобы и ее пропускало ?
2)нужно учесть , что домен второго уровня не может начинаться и заканчиваться на -
спасибо
Неактивен
А домен третьего уровня может начинаться с минуса? Если да — что-то такое:
([A-Za-z0-9\\-_]+\\.)*[A-Za-z0-9_][A-Za-z0-9\\-_]*[A-Za-z0-9_]\\.[A-Za-z]+
Неактивен
Уважаемый Paulus, я новичок в этом деле и ,честно ,вы меня запутали еще больше )
не могли бы вы прокомментировать , что вы изменили/добавили ?
Неактивен
Я написал заново
Домен состоит из слов, разделенных точками. Слова состоят из букв, цифр,
знаков минус и подчеркиваний. У Вас есть дополнительное ограничение, не
имеющее отношение к реальности: домен второго уровня не имеет знаков
минус в начале и конце. Домены второго уровня не бывают однобуквенными,
поэтому мы можем считать, что два символа уж там есть.
Соответственно и пишется регулярное выражение:
«слово» ~ [A-Za-z0-9\\-_]+
«несколько слов, разделенных точкой» ~ ([A-Za-z0-9\\-_]+\\.)*
«домен второго уровня» ~ [A-Za-z0-9_][A-Za-z0-9\\-_]*[A-Za-z0-9_]
Кстати, я ступил, считая, что в домене первого уровня могут быть
только буквы. Поэтому сделаем его просто словом. Итого:
([A-Za-z0-9\\-_]+\\.)*[A-Za-z0-9_][A-Za-z0-9\\-_]*[A-Za-z0-9_]\\.[A-Za-z0-9\\-_]+
Неактивен
снова я
select 'https://jhk/asssssss' regexp '^(https|http|ftp)/(www|ftp)?([[:alnum:]]|\\.){0,2}([[:alnum:]|\\-|\\.])*([[:alnum:]|\\.]){0,2}([[:alpha:]]){2,5}/([[:alnum:]])*([[:alnum:]]|\\-)*([[:alnum:]])*$';
1)нужно сделать так , чтобы перед jhk нельзя было ставить точки (не пропускало)
2) чтобы нельзя было ставить две и более точки и два и более - подряд(между ними должен быть символ буквы/числа)
Неактивен
Второе ограничение опять не естественное — в URL бывают два минуса подряд.
Например, «яндекс.рф» эквивалентно «xn--d1acpjx3f.xn--p1ai».
По первому — ищите места, где у Вас стоит * или {0,} — именно в этих местах
Вы допускаете наличие пустого набора символов. Ограничение домена первого
уровня у Вас {2,5} — тоже не рабочее (тот же пример с .рф).
Неактивен