В мире сетей IPv6 стал преемником IPv4, предлагая значительно большее адресное пространство для размещения растущего числа устройств в Интернете. При работе с адресами IPv6 крайне важно проверить их формат, чтобы обеспечить правильность и избежать ошибок. Регулярные выражения (регулярные выражения) предоставляют мощный инструмент для сопоставления и проверки шаблонов. В этой статье мы рассмотрим различные методы и примеры кода для проверки адресов IPv6 с помощью регулярных выражений.
Метод 1: базовая проверка адреса IPv6
Давайте начнем с базового шаблона регулярного выражения для проверки адресов IPv6:
import re
def validate_ipv6_address(address):
pattern = r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$'
if re.match(pattern, address):
print("Valid IPv6 address")
else:
print("Invalid IPv6 address")
# Example usage
validate_ipv6_address("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
Метод 2: упрощенная проверка адреса IPv6
Если вы предпочитаете более краткий шаблон регулярного выражения, вы можете использовать следующее:
import re
def validate_ipv6_address(address):
pattern = r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$'
if re.fullmatch(pattern, address):
print("Valid IPv6 address")
else:
print("Invalid IPv6 address")
# Example usage
validate_ipv6_address("2001:0db8:85a3:0000:0000:8a2e:0370:7334")
Метод 3: гибкая проверка адреса IPv6
В некоторых случаях вы можете столкнуться с сокращенными адресами IPv6, в которых ведущие нули опущены. Для обработки таких сценариев вы можете использовать следующий шаблон регулярного выражения:
import re
def validate_ipv6_address(address):
pattern = r'^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$'
if re.fullmatch(pattern, address) or re.fullmatch(pattern, address.replace('::', '::' + ':' * (8 - address.count(':')))):
print("Valid IPv6 address")
else:
print("Invalid IPv6 address")
# Example usage
validate_ipv6_address("2001:db8:85a3::8a2e:370:7334")
Метод 4: извлечение компонентов IPv6
Если вам нужно извлечь определенные компоненты из адреса IPv6, вы можете использовать группы захвата регулярных выражений. Следующий код демонстрирует, как извлечь отдельные компоненты:
import re
def extract_ipv6_components(address):
pattern = r'^([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4}):([0-9a-fA-F]{1,4})$'
match = re.match(pattern, address)
if match:
groups = match.groups()
print("IPv6 Components:")
for i in range(1, 9):
print(f"Component {i}: {groups[i-1]}")
# Example usage
extract_ipv6_components("2001:0db8:85a3:0000:0000:8a2e:0370:7334")