Regex соответствует имени хоста & # 8212; не включая ДВУ

StackOverflow https://stackoverflow.com/questions/836536

  •  08-07-2019
  •  | 
  •  

Вопрос

Мне нужно сопоставить имя хоста, но не хочу, чтобы tld:

example.com = ~ / regex / = > Пример

sub.example.com = ~ / regex / = > sub.example

sub.sub.example.com = ~ / regex / = > sub.sub.example

Любая помощь с регулярным выражением? Спасибо.

Это было полезно?

Решение

Предполагая, что ваша строка правильно отформатирована и не включает в себя такие вещи, как протокол [т.е. http: //] , вам нужны все символы вплоть до, но не включая окончательный .tld.

Так что это самый простой способ сделать это. Хитрость с регулярными выражениями не в том, чтобы усложнять вещи:

.*(?=\.\w+)

Это в основном говорит, дайте мне все символы в наборе, за которым следует [например] .xxx , который в основном просто вернет все до последнего периода .

Если у вас нет заглядывания в будущее, его, вероятно, будет проще всего использовать:

(\w+\.)+

который даст вам все, вплоть до финального '.' а затем просто обрежьте «.».

Другие советы

Попробуйте это

/.+(?=\.\w+$)/

без поддержки? = это было бы

/(.+)\.\w+$/

а затем взять содержимое первой группы

Вы можете просто снять с себя:

s/\.[^\.]*$//;
(?<Domain>.*)\.(?<TLD>.*?)$
(.*)\.

Это на самом деле не относится к tlds, оно просто даст вам все до последнего периода в строке. Если вы хотите быть строгими в отношении действительных ДВУ или чего-либо еще, это должно быть написано по-другому.

Мне не ясно, как вы хотите, чтобы матч работал. но с обычным расширенным регулярным выражением вы должны быть в состоянии сопоставить любое слово с [a-zA-Z] {2,3} Так что если вы пытаетесь получить полное имя, отличное от tld что-то вроде

\(.\)\.[a-zA-Z]{2,3}$

должно быть близко.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top