Php 验证逗号分隔列表但以';结尾的正则表达式是什么&';还有一句话

Php 验证逗号分隔列表但以';结尾的正则表达式是什么&';还有一句话,php,regex,Php,Regex,我可以提取到11.20,但在这之后逗号停止,我编写的正则表达式失败。我怎样才能写出这个表达式?我正在使用preg\u match\u all函数 输入字符串: 8, 8.40, 9.20, 10, 10.40, 11.20, 12 & 12.40 latenight 所需产出: Array ( [0] => 8, [1] => 8.40, [2] => 9.20, [3] => 1

我可以提取到11.20,但在这之后逗号停止,我编写的正则表达式失败。我怎样才能写出这个表达式?我正在使用
preg\u match\u all
函数

输入字符串:

8, 8.40, 9.20, 10, 10.40, 11.20, 12 & 12.40 latenight
所需产出:

Array
    (

        [0] =>  8,
        [1] =>  8.40,
        [2] =>  9.20,
        [3] =>  10,
        [4] =>  10.40,
        [5] =>  11.20,
        [6] =>  12,
        [7] =>  12.40,
    )
印刷品

Array
(
    [0] => 8
    [1] => 8.40
    [2] => 9.20
    [3] => 10
    [4] => 10.40
    [5] => 11.20
    [6] => 12
    [7] => 12.40
    [8] => latenight
)

足够近吗?

不需要匹配逗号或符号,是吗?为什么不匹配你想要的呢

var str = "8, 8.40, 9.20, 10, 10.40, 11.20, 12 & 12.40 latenight";

var res = str.match( /\d+(\.\d{2})?|\w+$/g );

console.log( res ); //["8", "8.40", "9.20", "10", "10.40", "11.20", "12", "12.40", "latenight"]

//RegExp parts

\d+      - 1 or more digits 
(        - start optional group
  \.     - a literal decimal point
  \d{2}  - exactly 2 digits
)?       - end optional group
|        - or
\w+$     - a word at the end of the string
如果你不想把这个词放在末尾,那么就把最后一句删去

var str = "8, 8.40, 9.20, 10, 10.40, 11.20, 12 & 12.40 latenight";

var res = str.match( /\d+(\.\d{2})?/g );

console.log( res ); //["8", "8.40", "9.20", "10", "10.40", "11.20", "12", "12.40"]
这句话,

[0-9]*(?:\.?[0-9]+)?(?=\s*&|\s*,)
可能也有用


如果您希望简化/修改/探索表达式,将在的右上面板中进行解释。如果您愿意,还可以在中查看它与一些示例输入的匹配情况



这个答案很好,但是,正如问题中所示,“latenight”不应该出现在数组中。@Qqwy:有趣的是,我第一次尝试这个答案时与结尾的单词不匹配-我已经添加了原始版本您的正则表达式是完美的,但我必须给出另一个正确答案,因为它是一个带有php标记的问题。非常感谢
[0-9]*(?:\.?[0-9]+)?(?=\s*&|\s*,)
$re = '/[0-9]*(?:\.?[0-9]+)?(?=\s*&|\s*,)/s';
$str = '8, 8.40, 9.20, 10, 10.40, 11.20, 12 & 12.40 latenight';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

var_dump($matches);