Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 从字符串中获取数字(可能是逗号分隔的)_Php_Regex - Fatal编程技术网

Php 从字符串中获取数字(可能是逗号分隔的)

Php 从字符串中获取数字(可能是逗号分隔的),php,regex,Php,Regex,字符串是“Lorem,ipsum 12 dolorem,si amet 58,14”等等。我需要提取“12”和“58,14”。我没有常规表达的经验。所以问题是——我应该怎么做?:) 语言(如果这很重要)是php5。 您可以在$foundMatches[0]找到所需的结果 编辑:将正则表达式更新为不匹配123、或012。如果需要,请使用较旧的/\d+,?\d*?/ 有用阅读:很抱歉第一次发布未经测试的代码。这一个已经过测试。您的正则表达式正在工作,但它返回一个包含以下元素的数组:[0]=>arr

字符串是“Lorem,ipsum 12 dolorem,si amet 58,14”等等。我需要提取“12”和“58,14”。我没有常规表达的经验。所以问题是——我应该怎么做?:) 语言(如果这很重要)是php5。


您可以在
$foundMatches[0]
找到所需的结果

编辑:将正则表达式更新为不匹配
123、
012
。如果需要,请使用较旧的
/\d+,?\d*?/


有用阅读:

很抱歉第一次发布未经测试的代码。这一个已经过测试。您的正则表达式正在工作,但它返回一个包含以下元素的数组:
[0]=>array([0]=>'12',[1]=>'58,14'),[1]=>array([0]=>'12',[1]=>'58'),[2]=>array([0]=>'[1]=>',14')
是否可以修改正则表达式,使其只返回给定数组的第一个元素中找到的匹配项?因为我需要精确的“12”和“58,14”,而您的regexp返回的值大于此值(我在循环中不需要这些值)。@egis仅使用
$foundMatches[0]
。如果需要,可以执行
$foundMatches=$foundMatches[0]
放弃其他捕获的项目。您也可以使用
(?:)
而不是
(?:)
切换到非捕获组,但我认为如果使用普通分组,则更容易理解正则表达式`因为它返回的正是我需要的:)让我澄清一下-我总是在第一个数组元素中找到所需的结果?不需要在整个数组中循环?只要仔细考虑不同的文化,以及它们如何影响列表中的小数点。如果您选择了错误的内部格式,您可能会遇到很难跟踪和修复的错误。
<?php
$foundMatches = array();
$targetString = "Lorem, ipsum 12 dolorem, si amet 58,14";
preg_match_all('/([1-9]\d*|0)(,\d+)?/', $targetString, $foundMatches);
var_dump($foundMatches);
?>