Форум сайта python.su
Долго думал над тем как заставить регулярные выражения искать ip адреса типа 192.164.0.1. Пока не придумал ничего лучше чем "({1,3}\.{1,3}\.{1,3}\.{1,3})". Но такое выражение пропускает явно не ip адреса типа 999.888.777.666. Это принципиальное ограничение регулярных выражений?
Офлайн
это принцпиальное ограничение этого регулярного выражения
Офлайн
bazookaА не могли бы вы предложить другое регулярное выражение, свободное от этого ограничения?
это принцпиальное ограничение этого регулярного выражения
Офлайн
неа, но в нете я видел такое
Офлайн
В django для валидации IP используется такой регэксп:
ipv4_re = re.compile(r'^(25|2\d|?\d?\d)(\.(25|2\d|?\d?\d)){3}$')
Офлайн
Можно обойтись без регулярок
def isIp(ip):
for octet in ip.split("."):
if int(octet) not in range(256):
return False
return True
print isIp("192.168.1.1")
print isIp("10.0.0.256")
Офлайн
pasaranaxИ проверку на длину. А также на 127 и прочие :)
Можно обойтись без регулярок
…
Можно еще добавить проверку на 0 в первом октете.
print(isIp("192.168.1.1.34.54.43.23"))
True
print(isIp("127.0.0.1"))
True
Офлайн
pasaranaxНет нельзя, моя задача - выцепить из длинного текста айпишники.
Можно обойтись без регулярок
AlexKiriukhaСпасибо. Пошел читать маны, многадумать и понимать смогу ли я это выражение адаптировать к своей задаче ).
В django для валидации IP используется такой регэксп:
ipv4_re = re.compile(r'^(25|2\d|?\d?\d)(\.(25|2\d|?\d?\d)){3}$')
Офлайн
pasaranax
А правильно ли использовать конструкцию
if int(octet) not in range(256):
return False
int = int(octet)
return (int >= 0 and int <= 255)
Отредактировано (Фев. 28, 2010 14:19:37)
Офлайн
ArdlingМожно.
Нет нельзя, моя задача - выцепить из длинного текста айпишники.
def is_ip(ip):
res = True
octets = ip.split(".")
for octet in octets:
if (255 < int(octet) or (int(octet) < 0) or (len(octets) != 4):
res = False
break
return res
Отредактировано (Фев. 28, 2010 15:09:38)
Офлайн