3

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

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

4 回答 4

6

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

$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);
于 2012-07-20T14:19:16.603 回答
3

您可以像以前一样找到它,然后扫描号码(Demo):

$find = strpos($text, 'Case#');
sscanf(substr($text, $find), 'Case#%d', $numbers);
于 2012-07-20T14:21:07.640 回答
0

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

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

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

于 2012-07-20T14:21:18.950 回答
0

最简单的解决方案是

if (preg_match('/Case#\s*(\d+)/i', $test, $m)) {
    $numbers = $m[1];
}
于 2012-07-20T14:23:18.553 回答