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