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


PHP: Best method to extract numbers from a string

可能重复:
php 中字符串返回数字的一个简单函数

从字符串中提取一组特定数字的最佳/最有效方法是什么?例如:我想在sring"blah-blah-Case#0004522 blah-blah"中的Case#之后立即获得一组数字。我想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);

您可以使用正则表达式首先匹配您的字符模式(Case#),然后希望只匹配数字(数字),即PCRE(Demo)中的'd

$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);

您可以按照自己的操作定位它,然后扫描数字(Demo):

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

使用PHP的preg_match和以下正则表达式:

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

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

最简单的解决方案是

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