匹配模式与分数

时间:2013-10-03 17:26:04

标签: regex

我正在使用正则表达式来验证模式后跟一个分数。我发现了这些,它们符合我的需要。总的来说,我希望匹配1 to 2数字,后跟分数。这些表达方式有何不同?

/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm

/^\d+(?:[\xbc\xbd\xbe])$/ugm

/^\w+(?:\w+)$/ugm

我需要匹配以下内容:

12½
1¼
11¾

但不匹配..

111½
11111¼ 
0¾

3 个答案:

答案 0 :(得分:2)

首先,[0-9]匹配以下任何字符:(09)并且与\d

不同

\d匹配数字(0-9)和其他数字字符,例如Unicode

\w匹配任何单词字符(字母数字下划线

虽然这些给定的表达式可能匹配相同的模式,但您最终将无法使用 3rd 解决方案。 它将匹配foobar之类的模式,因为您可以看到此模式中没有(0-9)个字符或Unicode分数。

通过运行快速基准测试,您的第二解决方案比第一个解决方案慢16%,而且它与Unicode和其他数字字符匹配。

我会坚持使用您的第一个表达式,并将其更改为匹配1-2个数字字符。

/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm

甚至

/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm

答案 1 :(得分:1)

尝试以下方法:

^[1-9][0-9]?[\xbc\xbd\xbe]$

[0-9]\d是等效的。 \w匹配“字”字符。表达式[1-9]匹配一个非零的数字(因为您特别询问如何排除该数字)。

这对于一些传统的8位字符集来说是没有吸引力的硬编码;为了将来的兼容性,您应该考虑切换到Unicode。

答案 2 :(得分:1)

你可以尝试

 /^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm