Нужно выражение не совпадать после появления двоеточия - PullRequest
0 голосов
/ 06 февраля 2019

Итак, у меня есть список имен, и я хотел отфильтровать их в правильном формате.Для справки мне нужен формат IP :: hostname.Это формула регулярного выражения, которую я в настоящее время имею:

^\d+(\.|\:)\d+\.\d+\.\d+::.+\w$

Однако мне нужно изменить ее так, чтобы при наличии каких-либо двоеточий (:) в имени хоста или после него для негоне соответствует выражению:

Это соответствует правильному:

10.179.12.241::CALMGTVCSRM0210

Это соответствует, но не должно:

10.179.12.241::CALMGTVCSRM0210:as

Любая помощь покак изменить мое выражение, чтобы оно не совпадало ни с одним двоеточием после того, как будет оценено имя хоста

1 Ответ

0 голосов
/ 06 февраля 2019

Шаблон .+ соответствует 1 или более символам, кроме символов разрыва строки, как можно большему числу, и, таким образом, соответствует двоеточиям, разрешающим их.Вам нужен класс отрицательных символов , [^:]*, который будет соответствовать 0+ символам, отличным от двоеточия.

Вы можете исправить свое регулярное выражение (и немного улучшить его)) используя

^\d+[.:]\d+\.\d+\.\d+::[^:]*\w$
                       ^^^^^

См. демонстрационную версию regex

Чтобы убедиться, что вы хотите сопоставить действительный IP-адрес, вам лучше использовать

^(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}::[^:]*\w$

См. еще одну демонстрацию регулярных выражений ( Источник регулярных выражений IP ).(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) соответствует одному октету от 0 до 255, а (?:\.<octet_pattern>){3} соответствует трем повторениям точки и шаблона октета.

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