Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式从1+;2+;2.5附加一些规则_Php_Regex_Preg Match_Preg Match All - Fatal编程技术网

Php 正则表达式从1+;2+;2.5附加一些规则

Php 正则表达式从1+;2+;2.5附加一些规则,php,regex,preg-match,preg-match-all,Php,Regex,Preg Match,Preg Match All,我正在尝试使用正则表达式验证格式为3.5+1+2+2.5的数字,规则如下: 1)每个数字是0.5的倍数 2)每个数字至少是1 3)只需要一个号码 例如: `2.5+1` Validates `1+2+2.5` Validates `1` Validates `1.6` INCORRECT `1+2+` INCORRECT `1+2+2.5+6` Validates 我想可能吧?但我正在与这种错误模式作斗争: $value = '3.5+1+2+

我正在尝试使用正则表达式验证格式为
3.5+1+2+2.5
的数字,规则如下:

1)每个数字是
0.5的倍数

2)每个数字至少是
1

3)只需要一个号码

例如:

`2.5+1`     Validates
`1+2+2.5`   Validates
`1`         Validates
`1.6`       INCORRECT
`1+2+`      INCORRECT
`1+2+2.5+6` Validates
我想可能吧?但我正在与这种错误模式作斗争:

$value = '3.5+1+2+2.5';
if (preg_match('/^(\d(\.5)?)(\+\d(\.5)?)*/', $value)) {
    echo array_sum(explode('+', $value));
}
但上面的模式似乎验证了一切。

试试这个:

^[1-9]+(\.5)?(\+[1-9]+(\.5)?)*$
试试这个:

^[1-9]+(\.5)?(\+[1-9]+(\.5)?)*$

您的正则表达式需要一些小的修改:

  • 字符串结束锚定
    $
  • [1-9]
使用子例程,较短的正则表达式为:

^([1-9]+(\.5)?)(\+(?1))*$

请参见您的正则表达式需要一些小的修改:

  • 字符串结束锚定
    $
  • [1-9]
使用子例程,较短的正则表达式为:

^([1-9]+(\.5)?)(\+(?1))*$

请参见

您可以使用
^([1-9]+(\.5”)(\+(?1))*$
。在这里观看现场演示,您可以使用
^([1-9]+(\.5”)(\+(?1))*$
。看到这里的现场演示,你的帖子对我很有帮助,我能够了解regex,还有很多关于regex引擎中的递归支持,非常感谢@很荣幸。你的帖子对我很有帮助,我也了解了正则表达式,还有很多正则表达式引擎中的递归支持,非常感谢@阿米尔,我的荣幸。