为什么QRegExp匹配此正则表达式?

时间:2019-01-21 15:08:16

标签: ipv4 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");

它返回true。

但是在上述正则表达式中,以点结尾的部分必须重复3次。这个正则表达式有什么问题?

1 个答案:

答案 0 :(得分:0)

以上正则表达式在C ++代码中不正确。 C ++标准转义序列不包含:     '\。'

C++ escape sequences

C ++中正确的IPv4正则表达式为:

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代码。