RegEx для IP-адреса без ограничения диапазона - PullRequest
0 голосов
/ 04 сентября 2018

Я ищу регулярное выражение, которое находит IP-адреса без ограничения диапазона (т. Е. 0-999). Это «проще», чем регулярное регулярное выражение IP-адреса, но я изучаю регулярное выражение и нахожусь в тупике о том, как по существу завершить регулярное выражение и не сопоставлять IP-адреса с более чем 4 периодами или символами до / после него.

Вот что у меня есть: "/\b(\d{1,3}\.){3}(\d{1,3})\b/"

Итак, с помощью этого регулярного выражения он найдет большинство IP-адресов, но потерпит неудачу, когда есть такой IP-адрес:

1.2.3.4.5

Ценю помощь. И не имеет значения, какой вкус или регулярное выражение, просто нужно знать, как не соответствовать описанному выше случаю.

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

Вы также можете использовать это.

^ [0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3}. [0-9] {1,3} $

0 голосов
/ 04 сентября 2018

Вы можете использовать lookarounds , чтобы ограничить контекст вокруг ожидаемых совпадений:

\b(?<!\d\.)(?:\d{1,3}\.){3}\d{1,3}\b(?!\.\d)
  ^^^^^^^^^                         ^^^^^^^^

См. Демоверсию regex

Здесь,

  • (?<!\d\.) является отрицательным взглядом сзади, который не соответствует совпадению, если непосредственно слева от текущего местоположения есть цифра + .
  • (?!\.\d) - это отрицательный прогноз, который не соответствует совпадению, если непосредственно справа от текущего местоположения есть . + цифра.

Чтобы убедиться, что октеты от 1 до 3 цифр совпадают, вы можете добавить дополнительные ограничения:

\b(?<!\d\.|\d)(?:\d{1,3}\.){3}\d{1,3}\b(?!\.?\d)
  ^^^^^^^^^^^^                         ^^^^^^^^^

См. еще одну демонстрацию регулярных выражений .

Здесь (?<!\d\.|\d) также терпит неудачу, если сразу перед текущим местоположением есть цифра, и упущение также происходит, когда после ожидаемого совпадения есть цифра без точки впереди.

...