如何过滤除第一个出现的整数以外的所有字符:
目标整数可能不在字符串的开头(即使 OP 的问题仅提供以整数开头的样本 - 其他研究人员可能需要更多实用程序......比如我的页面今天使用此页面关闭)。输入也可能不包含整数,或者没有前导/没有尾随非数字字符。
以下是一个正则表达式有两个检查:
- 它以字符串开头的所有非数字字符为目标——如果有的话,它会在第一个遇到的数字之前立即停止。
- 它匹配/使用第一个遇到的整数,然后立即忘记/释放它(使用
\K),然后匹配/使用字符串其余部分中遇到的任何字符。
我的 sn-p 将根据字符串的质量进行 0、1 或 2 次替换。
代码:(Demo)
$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',
)