QRegexp缺少数字

时间:2016-08-01 17:25:24

标签: regex qt

我们都对这个感到难过:

[^a-zA-Z]

在" 1082.006":

上运行此代码

enter image description here

请注意缺少" 6"

经过一些盲目的猜测,我们删除了{{1}}并得到了正确的答案。我们最初添加了这个,以便我们拒绝任何数字,其他字符直接附加没有空格。

例如:应该拒绝10.05D。

任何人都可以解释为什么这个额外的部分导致我们失去了最后一次" 6"?

1 个答案:

答案 0 :(得分:1)

[^a-zA-Z]是一个字符类。字符类匹配一个字符。它不匹配字符串的结尾,因为那里没有字符。

要获得该结果,引擎会将所有数字与\\d+匹配,包括最后一个。然后需要回溯以便最后一个字符类得到满足。

我认为您希望允许零宽度匹配(特别是当它是字符串的结尾时)。在您的情况下,最简单的方法是使用:

(-)?(\\d+)\\.(\\d+)([^a-zA-Z]|$)

或者,如果Qt支持非捕获组:

(-)?(\\d+)\\.(\\d+)(?:[^a-zA-Z]|$)

请注意,我还建议使用[.]代替\\.,因为我觉得它提高了可读性。