在PHP中使用Regex捕捉字符串中的不同数字类型


Catching Different Number Types in Strings by Regex in PHP

我试图捕捉不同的数字类型(浮点数,十进制,二进制,八进制和十六进制)在字符串的开头与此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