PHP:从字符串中提取数字的最佳方法

时间:2012-07-20 14:16:53

标签: php string preg-match

  

可能重复:
  a simple function for return number from string in php

从字符串中提取特定数字集的最佳/最有效方法是什么?例如:我希望在Case#in after“blah blah Case#004522 blah blah”之后立即得到一组数字。我想象Case#之后的数字字符数总是一样的,但是我希望代码不像以前那样做出这个假设。

到目前为止,我一直在使用strpos方法来定位Case#,然后在使用substr之后拉出特定数量的字符。我觉得这很笨重。也许preg_match会更有效或简化?

$text = "blah blah Case#004552 blah blah";
$find = strpos($text,'Case#');
if ( $find )
  $numbers = substr($text, $find+5, 6);

4 个答案:

答案 0 :(得分:6)

您可以使用正则表达式首先匹配您的字符模式(Case#),然后您希望仅匹配数字(数字),即PCRE中的\dDemo }):

$numbers = preg_match("/Case#(\d+)/", $text, $matches)
              ? (int)$matches[1]
              : NULL
    ;
unset($matches);

一次进行多个(整数)匹配:

$numbers = preg_match_all("/Case#(\d+)/", $text, $matches)
              ? array_map('intval', $matches[1])
              : NULL
    ;
unset($matches);

答案 1 :(得分:3)

您可以按原样找到它,然后扫描数字(Demo):

$find = strpos($text, 'Case#');
sscanf(substr($text, $find), 'Case#%d', $numbers);

答案 2 :(得分:0)

使用PHP的preg_match并使用正则表达式:

(?<=case#)[0-9]+

您可以测试@ http://regexr.com?31jdv

答案 3 :(得分:0)

最简单的解决方案是

if (preg_match('/Case#\s*(\d+)/i', $test, $m)) {
    $numbers = $m[1];
}