![]() |
Задавайте вопросы, мы ответим
Вы не зашли.
Задание сделать регулярку для 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} — тоже не рабочее (тот же пример с .рф).
Неактивен