Почему QRegExp соответствует этому регулярному выражению?

Я нашел регулярное выражение, которое должно соответствовать адресу 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");

Это возвращает истину.

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

1 ответ

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

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

Правильное регулярное выражение 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 для '.'

Другие вопросы по тегам