Освоение проверки адреса IPv6 с помощью регулярных выражений

В мире сетей 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")