我很难理解这个简单的正则表达式。我有以下尝试:
[0-9]*\.?[0-9]*
我将其理解为零到多的数字,然后是一到零的句点,最后以零到多的数字结束。
我不想匹配上面以外的任何东西。我不想要正面/负面支持或任何其他特殊支持类型。但是,出于某种原因,上面的内容也匹配看似随机的字符。无论出于何种原因,以下所有内容都匹配:
- f32
- 32a
- 32-
- =33
在答案中,我正在寻找:
- 解释为什么我的正则表达式不起作用。
- 一个工作版本,并解释它为什么工作。
编辑:由于似乎造成了麻烦,我添加了“QT”标签,这是我正在使用的环境。
编辑:由于持续的困惑,我将添加一些代码。我开始认为我要么误用了 QT,要么 QT 有问题:
void subclassedQDialog::setupTxtFilters()
{
QRegExp numbers("^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$");
txtToFilter->setValidator(new QRegExpValidator(numbers,this));
}
这是从子类 QDialog 中得到的。 txtToFilter 是一个 QLineEdit。如果有人可以提出可能相关的建议,我可以提供更多代码。虽然上面的表达式不是原始表达式,但它是下面评论中的表达式之一,也以同样的方式失败。
最佳答案
你的问题是你没有正确转义\,你需要把\\.否则 C++ 编译器将删除\(至少 gcc 会这样做,并带有警告)并且正则表达式引擎将处理 .作为任何角色。
关于regex - float - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8775011/