我一直在使用标准的([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%%
。