[Python] regex for ip-address, domain and url

Discussão em 'Python' iniciado por Stack, Fevereiro 17, 2025.

  1. Stack

    Stack Membro Participativo

    Problem statement:


    I am trying to generate regex for ip-address, domain and url. These are my defitions:

    IP Address:

    93.114.205.169


    Domain:

    example.com
    sub.example.com


    Url:

    93.114.205.169/path
    example.com/path
    sub.example.com/path


    So, an url always has a path to resource. But an IP-Address or domain should not have path to resource otherwise it would be an URL. Also note that these IP-address, domain and url can have http or https optionally with or without www.

    My attempt:


    I have tried various ways for these regex:

    [[rules]]
    id = "ip-address"
    description = "Potential IP Address detected."
    regex = '''\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b'''
    entropy = 2
    keywords = ["ip"]


    [[rules]]
    id = "domain"
    description = "Potential domain name detected."
    regex = '''\b[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b'''
    entropy = 2
    keywords = ["domain"]

    [[rules]]
    id = "url"
    description = "Potential URL detected."
    regex = '''\b(?:https?|ftp):\/\/(?:[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}|\d{1,3}(?:\.\d{1,3}){3})(?::\d{1,5})?(?:\/[^\s\"<>]*)?\b'''
    entropy = 2
    keywords = ["http", "https", "ftp", "url"]


    But, these regex covering ip-address as url. For example, this ip-address http://93.114.205.169 is covering in url not as ip-address which should be only as ip-address but not as url according to my above definitions.

    I changed to these regex:

    [[rules]]
    id = "ip-address"
    description = "Potential IP Address detected."
    regex = '''\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b'''
    entropy = 2
    keywords = ["ip"]

    [[rules]]
    id = "domain"
    description = "Potential domain name detected."
    regex = '''\b[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\b'''
    entropy = 2
    keywords = ["domain"]

    [[rules]]
    id = "url"
    description = "Potential URL detected."
    regex = '''\b(?:https?|ftp):\/\/(?:[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}|\d{1,3}(?:\.\d{1,3}){3})(?::\d{1,5})?(?:\/[^\s\"<>]*)?\b'''
    entropy = 2
    keywords = ["http", "https", "ftp", "url"]


    This also has same problem as above as http://93.114.205.169 recogize as url, but also it recognizing as ip-address too. It means it indentifies ip-address but it can also returning ip-addresses from urls like this http://93.114.205.169/path as url and 93.114.205.169 as ip-address.


    Could you suggest me correct regex for my these definitions:

    IP Address:

    93.114.205.169


    Domain:

    example.com
    sub.example.com


    Url:

    93.114.205.169/path
    example.com/path
    sub.example.com/path


    These IP-address, domain and url can have http or https optionally with or without www.

    Continue reading...

Compartilhe esta Página