C # регулярное выражение для проверки "реалистичных" значений IP - PullRequest
3 голосов
/ 06 апреля 2010

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

123-29-123-123.subdomain.zomg.com:8085
123.12.34.56:420

К сожалению, я ужасен в Regex, C #, поиске в Google и различиях между собственными существительными и обычными.

Приближение может быть проигрышным, на самом деле я бы выбрал все, что имеет разделитель двоеточий с портом после него.

Ответы [ 3 ]

2 голосов
/ 06 апреля 2010

Будет ли это работать?

^(?<Host>[^:]+)(?::(?<Port>\d+))?$

Это дает мне:

Host = 123-29-123-123.subdomain.zomg.com
Port = 8085

и

Host = 123.12.34.56:420
Port = 420
0 голосов
/ 10 апреля 2010

Можно отменить совпадение, используя то, что я называю Инвалидатором совпадения (?!) (Совпадение, если суффикс отсутствует ). (Я написал статью в блоге, озаглавленную: Инвалидатор совпадений регулярных выражений (Regex) (?!) В .Net на нем)

In (?! Суффикс ) Если суффикс соответствует , то совпадение не выполняется. Я учел возможности использования 256-999 и 000 (?!). Вот шаблон, используйте IgnorePatternWhiteSpace, потому что я прокомментировал шаблон:

string pattern = @"
^(                      # Anchor to the beginning of the line
                        # Invalidations
  (?!25[6-9])              # If 256, 257...259 are found STOP
  (?!2[6-9]\d)             # If 260-299 stop
  (?![3-9]\d\d)            # if 300-999 stop
  (?!000)                  # No zeros
  (\d{1,3})             # Between 1-3 numbers
  (?:[.-]?)             # Match but don't capture a . or -
 ){4,6}                 # IPV4 IPV6
(?<Url>[A-Za-z.\d]*?)   # Subdomain is mostly text
(?::)
(?<Port>\d+)";

НТН

0 голосов
/ 06 апреля 2010

Ну, простейшее регулярное выражение, вероятно, будет:

(\d{1,3}\.\d{1,3}\.\d{1,3})(:\d+)?

Но ... это позволило бы такие вещи, как 999.999.999, который не является действительным (формат действителен, но не значения) IP адрес.

Если вы хотите проверить каждый блок, лучше всего делать это вне регулярного выражения.

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