Допустим, у меня есть строка, которая может содержать один или несколько IP-адресов.Как сопоставить их все и только действительные, используя regex в ruby?
В настоящее время мое решение выглядит так:
IP_ADDR_REGEX = %r{
\b
(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]?)\.
(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]?)
\b
}x
Это хорошо работает, когда IP разделяются пробелами, например, извлекает192.168.1.1
из текста bla bla 192.168.1.1 bla
.Однако в этом случае он все равно извлекает 192.168.1.1
: bla bla 192.168.1.1.1.1 bla
.
Как сделать так, чтобы это не совпадало с такими случаями?т.е. когда это 192.168.1.1.1.1
, мое регулярное выражение не должно возвращать совпадение.Я искал много решений по этой проблеме, но не смог найти то, что я хочу.Я также пытался найти решение самостоятельно, сопоставляя только пробелы в конце (потому что \b
также соответствует символу .
), но я не мог заставить его работать.Спасибо