регулярный домен верхнего уровня с / без номеров - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь выяснить, как использовать регулярное выражение if = then | else.

Этот код:

(?(?=(.*)[.][a-zA-Z]{2}$)(.*)[.](.*)[.][a-zA-Z]{2}$|(.*)[.](.*)[.][a-zA-Z0-9]{2,}$)

должен запросить последние 2 символа после точки.

Упоминание сайта:
https://www.regular -expressions.info / conditional.html
синтаксис должен быть правильным?

Если в домене верхнего уровня есть только два символа, ни один из этих двух не может быть числом.
Например.
www.url.a1 должно быть не так.
www.url.aa должен быть действительным

Если после точки более двух букв, все буквы и цифры должны быть разрешены.
Например.
www.morelettersandnumbers.asfh1537 должен быть действительным

Разве этот код не должен этого делать или я что-то пропустил?

Редактировать: я использую Java, и я пытаюсь сделать это без метода шаблона.

1 Ответ

0 голосов
/ 15 января 2019

Ссылка, на которую вы ссылаетесь, немного мутная. Предварительный просмотр (?=...) в основном позволяет вам указать дополнительное ограничение для строки, которую вы хотите сопоставить, но в этом конкретном случае вам не нужно больше ограничений, чем у вас уже есть.

([^.]+[.])*[^.]+[.][A-Za-z]{2}$

соответствует домену (с необязательными поддоменами), который содержит двухсимвольный ccTLD только из букв; и

([^.]+[.])*[^.]+[.][-A-Za-z0-9]{3,}$

соответствует домену (с дополнительными поддоменами), который содержит более трех символов, букв или цифр.

Объединение этих двух, выделение необязательного субдомена в группу без захвата приводит к

(?:[^.]+[.])*([^.]+[.][A-Za-z]{2}|[^.]+[.][-A-Za-z0-9]{3,})$

, что все еще возможно неправильно для реальных доменов верхнего уровня, которые имеют несколько меток (например, co.uk или gob.mx) и не допускают однобуквенные домены верхнего уровня; но он, вероятно, делает то, что вы просите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...