可能重复:
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];
}