PHP预匹配:逗号分隔的小数

PHP预匹配:逗号分隔的小数,php,regex,Php,Regex,这个正则表达式找到正确的字符串,但只返回第一个结果。如何让它搜索文本的其余部分 $text =",415.2109,520.33970,495.274100,482.3238,741.5634 655.3444,488.29980,741.5634"; preg_match("/[^,]+[\d+][.?][\d+]*/",$text,$data); echo $data; 后续行动: 我正在推动这个脚本的最初预期,并且我正处于提取更多详细数据的阶段。在这上面浪费了很多时间…有人能解释一下

这个正则表达式找到正确的字符串,但只返回第一个结果。如何让它搜索文本的其余部分

$text =",415.2109,520.33970,495.274100,482.3238,741.5634
655.3444,488.29980,741.5634";

preg_match("/[^,]+[\d+][.?][\d+]*/",$text,$data);

echo $data;
后续行动: 我正在推动这个脚本的最初预期,并且我正处于提取更多详细数据的阶段。在这上面浪费了很多时间…有人能解释一下吗? 这是我的字串:

155.101.153.123:simple:mass_mid:[479.0807,99.011, 100.876],mass_tol:[30],mass_mode:  [1],adducts:[M+CH3OH+H],
130.216.138.250:simple:mass_mid:[290.13465,222.34566],mass_tol:[30],mass_mode:[1],adducts:[M+Na],
这是我的正则表达式: “/mass_mid:[((?:\d+)(?:\d+(:,)*)/”


我真的很头疼!有人能告诉我如何从结果中排除行mass\u mid:[,并保留逗号分隔的值吗?

使用
preg\u match\u all
而不是
preg\u match

从PHP手册:

(`preg_match_all`) searches subject for all matches to the regular expression given in pattern and puts them in matches in the order specified by flags.

After the first match is found, the subsequent searches are continued on from end of the last match.

不要使用正则表达式。使用
split
分隔逗号上的输入

正则表达式并不是一根魔杖,每当遇到涉及字符串的问题时,你都会挥舞它。

Description 要提取可能包含单个小数点的数值列表,可以使用此正则表达式

\d*\?\d+

PHP代码示例:
如果文本格式很好,为什么不简单地使用
explode
?您的正则表达式没有意义,您将所有内容都放在字符类中。请改用
/\d+(?:\。\d+)/
。您的正则表达式将在字符串“123.45”上失败谢谢HamZa,现在一切都好了,太好了!谢谢你,这帮了大忙。我怎样才能让正则表达式省略换行符呢?如果你的意思是只匹配行,你必须将你的正则表达式括在^和$:/^[^,]+[\d+][.?][\d+]*$/
split
已被弃用,现在建议改用
preg_split
explode
(如果不需要正则表达式)。
<?php
$sourcestring=",415.2109,520.33970,495.274100,482.3238,741.5634
655.3444,488.29980,741.5634";
preg_match_all('/\d*\.?\d+/im',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
$matches Array:
(
    [0] => Array
        (
            [0] => 415.2109
            [1] => 520.33970
            [2] => 495.274100
            [3] => 482.3238
            [4] => 741.5634
            [5] => 655.3444
            [6] => 488.29980
            [7] => 741.5634
        )

)