我正在努力理解这个简单的正则表达式。我有以下尝试:
[0-9]*\.?[0-9]*
我将其理解为零对多数字,后跟一对零句点,最后以零对多数字结尾。
我不想与上述完全匹配。我不想要积极/消极支持或任何其他特殊支持类型。但是,出于某种原因,上述内容也与似乎是随机字符的内容相匹配。以下所有因素无论如何匹配:
在答案中,我正在寻找:
编辑:由于似乎造成了麻烦,我添加了“QT”标记,即我正在使用的环境。
编辑:由于持续混淆,我将添加一些代码。我开始认为我要么误用QT,要么QT有问题:
void subclassedQDialog::setupTxtFilters()
{
QRegExp numbers("^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$");
txtToFilter->setValidator(new QRegExpValidator(numbers,this));
}
这是来自子类QDialog。 txtToFilter是一个QLineEdit。如果有人可以提出可能相关的建议,我可以提供更多代码。虽然上面的表达不是原文,但它是下面评论中的一个,也是以同样的方式失败。
答案 0 :(得分:3)
你的问题是你还没有逃脱\正确,你需要把\\。否则C ++编译器将删除\(至少gcc执行此操作,并发出警告)并且正则表达式引擎将处理。任何角色。
答案 1 :(得分:1)
将^
放在开头,将$
放在最后。这会将你的正则表达式固定在字符串的开头和结尾。
答案 2 :(得分:1)
您的表达式在字符串中间找到匹配项。如果将锚点添加到表达式的开头和结尾,则列表中的字符串将被忽略。您的表达式会匹配空字符串,但这不是您为匹配.99
和99.
字符串而支付的价格。
^[0-9]*\.?[0-9]*$
更好的选择是
^[0-9]*(\.[0-9]+)?$
因为只有在它后面至少有一个数字时才会匹配小数点。
答案 3 :(得分:1)
其中一个必须是+
而不是*
。您要允许“.9
”有效,还是要求领先0
?