为了将我的字符串拆分为以数字开头的字符串,后跟字母为:
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);
我用过
$str='12 jan';
$str='12 jan';
$str='12/jan';
$str='12//jan';
$str='12/jan';
$str='12*/jan';
$str='12*//jan';
它工作文件并提供所需的输出。我想更新它,以便它为字符串提供相同的输出。
Array
(
[0] => 12
[1] => jan
)
代码应该适用于上面给出的任何字符串,以便在一天结束时我有一个像
这样的数组patindex()
任何帮助将不胜感激。
答案 0 :(得分:1)
如果您在评论中回答我的问题,可以对此进行优化。
模式:~(?<=[0-9])[*/ ]*(?=[a-z]+)~i
上述内容将匹配零个或多个*
,/
和/或空格字符。
在您的输入字符串上,这将同样准确和快速:
模式:~\d+\K[^a-z]*~i
或:~\d+\K[*/ ]*~
(不需要区分大小写的模式修饰符)
以上将匹配前导数字后面的零个或多个非字母字符。
当然preg_split
的表兄弟也可以做得很好:
$strings=['12jan','12 jan','12 jan','12/jan','12//jan','12/jan','12*/jan','12*//jan'];
foreach($strings as $string){
var_export(preg_split('~(?<=[0-9])[*/ ]*(?=[a-z]+)~i',$string));
echo "\n";
var_export(preg_split('~\d+\K[*/ ]*~',$string));
echo "\n";
var_export(preg_match('~(\d+)[/* ]*([a-z]+)~i',$string,$out)?array_slice($out,1):'fail');
echo "\n";
var_export(preg_match('~(\d+)[/* ]*(.+)~',$string,$out)?array_slice($out,1):'fail');
echo "\n";
var_export(preg_match_all('~\d+|[a-z]+~i',$string,$out)?$out[0]:'fail');
echo "\n---\n";
}
所有方法都提供相同的输出。
答案 1 :(得分:0)
我已使用preg_match更新了您的代码 它提供输出的确切需求
$str='12/jan';
preg_match('/^(\d*)[\*\s\/]*([a-z]{3})$/i', $str, $match);
print_r($match);
但输出稍有改变,如下所示
array(
0 => '12/jan',
1 => '12',
2 => 'jan'
)
答案 2 :(得分:0)
一个简单的preg_match正则表达式:
foreach (['12 jan', '12 jan', '12/jan', '12//jan', '12/jan',
'12*/jan', '12*//jan'] as $test)
{
unset ($matches);
if (preg_match("#^([0-9]+)[ /*]*(.*)#", $test, $matches)) {
var_export( [$matches[1], $matches[2]] );
}
else {
print "Failed for '$test'.\n";
}
}
正则表达式是: