我正在使用正则表达式来验证后跟分数的模式。我找到了这些,它们符合我的需要。总的来说,我想匹配1 to 2
数字后跟分数。这些表达方式有何不同?
/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm
/^\d+(?:[\xbc\xbd\xbe])$/ugm
/^\w+(?:\w+)$/ugm
我需要匹配以下内容:
12½
1¼
11¾
但不匹配..
111½
11111¼
0¾
我正在使用正则表达式来验证后跟分数的模式。我找到了这些,它们符合我的需要。总的来说,我想匹配1 to 2
数字后跟分数。这些表达方式有何不同?
/^[0-9]+(?:[\xbc\xbd\xbe])$/ugm
/^\d+(?:[\xbc\xbd\xbe])$/ugm
/^\w+(?:\w+)$/ugm
我需要匹配以下内容:
12½
1¼
11¾
但不匹配..
111½
11111¼
0¾
好的开始,[0-9]
匹配任何字符:(0
到9
)并且不一样\d
\d
匹配数字 ( 0-9
) 和其他数字字符,例如Unicode。
\w
匹配任何单词字符(字母、数字或下划线)
尽管这些给定的表达式可能匹配相同的模式,但使用第三种解决方案最终会失败。它将匹配一个模式foobar
,如您所见0-9
,该模式中没有 ( ) 字符或 Unicode 分数。
通过运行快速基准测试,您的第二个解决方案16%
比您的第一个解决方案慢,而且它匹配 Unicode 和其他数字字符。
我会坚持使用您的第一个表达式,并将其更改为1-2
数字字符之间的匹配。
/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm
甚至
/^[1-9][0-9]?(?:[\xbc-\xbe])$/ugm
尝试以下操作:
^[1-9][0-9]?[\xbc\xbd\xbe]$
[0-9]
并且\d
是等价的。\w
匹配“单词”字符。该表达式[1-9]
匹配一个不为零的数字(因为您特别询问了如何排除该数字)。
这对一些遗留的 8 位字符集进行了硬编码;为了将来的兼容性,您应该考虑切换到 Unicode。
你可以试试
/^[1-9][0-9]?(?:[\xbc\xbd\xbe])$/ugm