我正在开发一个获取如下字符串的函数:
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
(包括空格)出现后没有数字
答案 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];
示例程序为available here(PHP v5.5.18)。