在第一次出现标识符后,在字符串中获取第一个数字

时间:2015-04-12 12:41:04

标签: php regex string

我正在开发一个获取如下字符串的函数:

identifier 20 j. - cat: text text text aaaa dddd ..... cccc 60' - text, 2008

并提取数字20,以便第一次出现identifier之后的字符串中的第一个数字(包括空格)

但如果我有这样的字符串:

identifier j. - cat: text text text aaaa dddd ..... cccc 60' - text, 2008

函数应返回NULL,因为在identifier(包括空格)出现后没有数字

你能帮帮我吗? 感谢

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

$matches = array();
preg_match('/identifier\s*(\d+)/', $string, $matches);
var_dump($matches);

\s*是空格。 (\d+)匹配一个数字。

您可以将其包装在一个函数中:

function matchIdentifier($string) {
    $matches = array();
    if (!preg_match('/identifier\s*(\d+)/', $string, $matches)) {
        return null;
    }
    return $matches[1];
}

答案 1 :(得分:1)

$string = "identifier 20 j. - cat: text text text aaaa dddd ..... cccc 60' - text, 2008";
$tokens = explode(' ', $string);
$token2 = $tokens[1];
if(is_numeric($token2))
{
    $value = (int) $token2;
}
else
{
    $value = NULL;
}

答案 2 :(得分:1)

您可以使用\K运算符和^锚点获取匹配字段而不捕获子组,只匹配字符串开头的字词:

$re = "/^identifier \\K\\d+/"; 
$str = "identifier 20 j. - cat: text text text aaaa dddd ..... cccc 60' - text, 2008"; 
preg_match($re, $str, $matches);
echo $matches[0];

Demo is here

示例程序为available here(PHP v5.5.18)。