使用PHP提取字符串中的第一个整数
考虑以下字符串:使用PHP提取字符串中的第一个整数,php,preg-replace,Php,Preg Replace,考虑以下字符串: $strings = array( "8.-10. stage", "8. stage" ); 我想提取每个字符串的第一个整数,这样它就会返回 8 8 我尝试用preg_replace过滤掉数字,但它返回所有整数,我只想要第一个 foreach($strings as $string) { echo preg_replace("/[^0-9]/", '',$string); } 有什么建议吗 试试这个: $strings = array(
$strings = array(
"8.-10. stage",
"8. stage"
);
我想提取每个字符串的第一个整数,这样它就会返回
8
8
我尝试用preg_replace过滤掉数字,但它返回所有整数,我只想要第一个
foreach($strings as $string)
{
echo preg_replace("/[^0-9]/", '',$string);
}
有什么建议吗 试试这个:
$strings = array(
"8.-10. stage",
"8. stage"
);
$res = array();
foreach($strings as $key=>$string){
preg_match('/^(?P<number>\d)/',$string,$match);
$res[$key] = $match['number'];
}
echo "<pre>";
print_r($res);
$strings=数组(
“8-10.舞台”,
“8.阶段”
);
$res=array();
foreach($key=>$string形式的字符串){
preg_match(“/^(?P\d)/”,$string,$match);
$res[$key]=$match['number'];
}
回声“;
印刷品(港币);;
使用正则表达式的一种方便的(虽然性能上没有破纪录的)解决方案是:
echo substr($string, 0, strspn($string, "0123456789"));
假设输入中至少有一个数字,这将打印第一个数字
非数字字符将被完全忽略,除了它们被视为分隔数字之外,这意味着第一个数字可以出现在输入中的任何位置(不一定在开头)
如果您只考虑在字符串开头出现的一个数字,则正则表达式不是必需的:
foreach($strings as $string){
echo preg_replace("/([0-9]+)\./", "\\1",$string);
}
如果整数始终位于字符串的开头:
(int) strpbrk($string, "0123456789");
如果不是,则用于提取第一个非负数:
preg_split("/\D+/", "$string ")[1];
(int) preg_replace("/^\D+/", "", $string);
preg_match('/\d+/', "$string 0", $m)[0];
选择
这些一行程序基于和:
其中两个会在字符串中附加额外字符,这样空字符串或不带数字的字符串不会导致问题
请注意,这些替代解决方案仅用于提取非负整数。如果您在PHP7+中有注意的话。 注意:只有变量应该在您的\u目录\u FILE.php的第\u行通过引用传递 使用此代码
$var = array_filter(preg_split("/\D+/", $string));
return reset($var);
将代码更改为
$strings = [
'stage', // expect empty string
'8.-10. stage', // expect 8
'8. stage', // expect 8
'8.-10. stage 1st', // expect 8
'Test 8. stage 2020', // expect 8
'Test 8.-10. stage - 2020 test', // expect 8
'A1B2C3D4D5E6F7G8', // expect 1
'1000', // expect 1000
'Test 2020', // expect 2020
];
var_export(
preg_replace('/^\D+|\d+\K.*/', '', $strings)
);
好好享受吧!向Ovasapov问好如何过滤掉除第一个整数以外的所有字符: 目标整数可能不在字符串的开头(即使OP的问题只提供以整数开头的样本——其他研究人员可能需要更多的实用程序……就像我今天用这个页面结束的页面)。输入也可能不包含整数,或不包含前导/尾随非数字字符 下面是一个正则表达式,它有两个检查:
\K
)“重置”示例导致PHP严格通知。。。“严格标准:只能通过引用传递变量”如果我只想返回字母表,怎么做?但只适用于字符串开头有一位数字的数字,如果没有,后面的行将导致错误。
(int)$string代码>是一个很好的解决方案,我从未遇到过
(int) strpbrk($string, "0123456789");
preg_split("/\D+/", "$string ")[1];
(int) preg_replace("/^\D+/", "", $string);
preg_match('/\d+/', "$string 0", $m)[0];
echo reset(array_filter(preg_split("/\D+/", $string)));
$var = array_filter(preg_split("/\D+/", $string));
return reset($var);
$strings = [
'stage', // expect empty string
'8.-10. stage', // expect 8
'8. stage', // expect 8
'8.-10. stage 1st', // expect 8
'Test 8. stage 2020', // expect 8
'Test 8.-10. stage - 2020 test', // expect 8
'A1B2C3D4D5E6F7G8', // expect 1
'1000', // expect 1000
'Test 2020', // expect 2020
];
var_export(
preg_replace('/^\D+|\d+\K.*/', '', $strings)
);
array (
0 => '',
1 => '8',
2 => '8',
3 => '8',
4 => '8',
5 => '8',
6 => '1',
7 => '1000',
8 => '2020',
)