Почему QRegExp соответствует этому регулярному выражению? - PullRequest
0 голосов
/ 21 января 2019

Я нашел регулярное выражение, которое должно соответствовать IPv4-адресу:

QRegExp rx_ipv4("^((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])$");
bool match = rx_ipv4.exactMatch("1.2.33333");

Возвращает true.

Но в приведенном выше регулярном выражении часть, заканчивающаяся точкой, должна повторяться три раза.Что не так с этим регулярным выражением?

1 Ответ

0 голосов
/ 22 января 2019

Выше регулярное выражение не правильно в коде C ++.Стандартные escape-последовательности C ++ не содержат: '\.'

escape-последовательности C ++

Правильное регулярное выражение IPv4 в C ++:

QRegExp rx_ipv4("^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\x2E){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$");

где \ x2E - это код Ascii для '.'

...