我试图捕捉不同的数字类型(浮点数,十进制,二进制,八进制和十六进制)在字符串的开头与此regex:
/([0-9]*'.[0-9]*|0)|([1-9][0-9]*)|(0[xX][0-9a-fA-F]+)|(0[0-7]+)|(0b[01]+)|(0)/
我根据PHP的整数页来写:http://php.net/manual/en/language.types.integer.php
但是它捕获了" 1",或者只有"0"部分的0xABC",我需要使它与单行正则表达式。我错过了什么?
我想提供一些重要的技巧来解决和完善您的模式。
- 如果输入字符串 使用
- 将所有的交替分支分组,以便每个分支都绑定到字符串的"开头"。锚。
- 有几个选项以零开头,所以将这些相关的子模式分组是有意义的。
- 必须使用
'd*(?:'.'d+)
来确保一个点必须后跟一个数字才能合格。
^
将匹配锚定到前面建议模式:(作为多行模式,带有x
标志以提高可读性)
/^
(?:'d*(?:'.'d)+
|0(?:[xX]['da-fA-F]+|[0-7]+|b[01]+)?
|[1-9]'d*)
/x