Почему 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++ не содержат: '\.'
Правильное регулярное выражение 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 для '.'