正则表达式/命令后跟数字

时间:2017-06-18 15:16:13

标签: php regex

使用以下正则表达式无法验证/命令编号。 这是我需要的数字格式"验证"

  • / command 1
  • / command 0.5
  • / command 0.12345678

正如您所看到的,值必须为正数,小数位数最大为8。

我做了一些研究并发现:

\/command\s?[\S]

但这只适用于/ command 1。

3 个答案:

答案 0 :(得分:3)

setUpData()此处setUpClass()只匹配一个非空格字符,因此您可以使用其他内容。

BaseTestCase

\/command\s?\S(\.\S{1,8})?

  • \/command\s?[\S][\S]匹配零或一个

    • /command 1 // 1 : match one non-space /command 0.5 // 0.5 :more than one non-space character so won't match /command 0.123456789 // won't match 匹配(\.\S+)?和1 - 8个非空格字符

更具体地说是数字使用

要定义最大?个数字限制,请使用(\.\S{1,8})

^\/command\s?\d(\.\d{1,8})?$

注意:如果您想在.之前匹配更多数字,例如8,请使用

\d{1,8}

由@jen和@serge

建议

答案 1 :(得分:1)

如果要验证整个字符串,首先要记住的是将模式包含在字符串锚点的开头和结尾之间:\A...\z

关于最多8位小数的数字除了如果你不想要一个尾随点你需要使用一个可选组和正确的量词时,没有什么可说的:\d+(?:\.\d{1,8})?

另请注意,您可以使用其他字符更改模式分隔符。这样您就不必转义不是特殊正则表达式字符的斜杠。

结果:

$pattern = '~\A/command \d+(?:\.\d{1,8})?\z~';

(如果需要,请随意将空间设为可选)

答案 2 :(得分:0)

这是因为你错过了[\ S] +中的'+' 但上述内容不会区分数字和其他符号。

要选择“数字”,您可以在“类似perl”的正则表达式中使用以下内容:

/\/command\s*[0-9.]+/