Php 从字符串中获取数字(可能是逗号分隔的)
字符串是“Lorem,ipsum 12 dolorem,si amet 58,14”等等。我需要提取“12”和“58,14”。我没有常规表达的经验。所以问题是——我应该怎么做?:) 语言(如果这很重要)是php5。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
您可以在$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);
?>