Skip to content

URL_RE explain #56

@lud4ik

Description

@lud4ik
URL_REGEXP = re.compile(
    r'^(?:http|ftp)s?://'  # http:// or https://
    r'(?:\S+(?::\S*)?@)?'  # user and password
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-_]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|'  # domain...
    r'localhost|'  # localhost...
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})'  # ...or ip
    r'(?::\d+)?'  # optional port
    r'(?:/?|[/?]\S+)$',
    re.IGNORECASE,
)
  1. r'(?:\S+(?::\S*)?@)?' # user and password
    (?::\S*)? уже и так ловится \S+
    Ещё здесь уместней нежадный квантификатор +?: \S+?@, потому что мы же не ожидаем ещё одного @ в этой подстроке?
  2. r'(?:(?:A-Z0-9?.)+(?:[A-Z]{2,6}.?|[A-Z0-9-]{2,}.?)|' # domain...
    Эта сложность оправдана? По каким кейсам не подходит (?:\w[\w-]+.)+[\w-]+\w.?
    Минус должен быть в конце группы, я не знаю, что получится из [A-Z0-9-_]

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions