Регулярное выражение для сопоставления доменов с 3 точками

Цель регулярного выражения — взять строку и составить список всех имен хостов, но взять только 3 точки справа от нее.

Это работает, но можно увидеть, что скрипт выбирает левое имя хоста, а не правое.

Regex

((([a-zA-Z0-9]{1,63}|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\.){1,3}[a-zA-Z]{2,63})

Сейчас

site.com 1.site.com 2.1.site.com 3.2.1.site.ком 4.3.2.1.site.com 5.4.3.2.1.site.com

Исправлена

site.com 1.site.com 2.1.site.com 3.2.1.site.com 4,3.2.1.site.com 5.4.3.2.1.site.com

1

Решение

Если вы хотите использовать свое регулярное выражение для этого, вам нужно ограничить + просто {0,3} случаи, и использовать \b граница слова (?!\.) загляните в конец, чтобы убедиться, что мы сопоставляем строки на завершающей границе слова, и после нее не должно быть точки:

(([a-zA-Z0-9]{1,63}|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\.){0,3}[a-zA-Z]{2,63}\b(?!\.)
^^^^^              ^^^^^^^^

Увидеть regex demo

Обратите внимание, что + квантификатор соответствует 1 или более экземпляров квантифицированного подшаблона и {0,3} ограничения (связанный) квантификатор позволяет сопоставлять только 3 вхождения.

В C ++ вы можете использовать необработанный строковый литерал (R"(<PATTERN>)") чтобы определить регулярное выражение, чтобы избежать перегрузки:

std::regex rx(R"((([a-zA-Z0-9]{1,63}|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])\.){0,3}[a-zA-Z]{2,63}\b(?!\.))");
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]