我一直在使用标准的([0-9]+)模式来匹配字符串中的数字,但是现在有一个奇怪的边缘情况。我要符合以下条件:

123
456
.123
123。
%123
31日
14日
第二名
100.55
555.10

在上述情况下,非数字字符为:


s
H
ñ
d

但是它们可能是多种字符。
有什么想法吗?

JS或PHP会很棒。

最佳答案

我尝试为所有情况创建一些规则:

(\d+(?:\.\d*)?)        // 123 ; 123. ; 123.45
([%.]\d+)              // %123 ; .123
(\d+(?:st|nd|th))      // 31st ; 2nd ; 14th


然后混合:

((?:\d+(?:\.\d*)?)|(?:[%.]\d+)|(?:\d+(?:st|nd|th)))


如果您想要更短的内容,则可以简单地使用([%.\dshnd]+),但这会捕获许多不需要的条目,例如%%123%%

07-24 09:45
查看更多