【发布时间】:2011-05-17 16:55:03
【问题描述】:
我有一个由字母和数字组合而成的字符串。对于我的应用程序,我必须用字母和数字分隔一个字符串:例如:如果我的字符串是“12jan”,我必须分别获得“12”“jan”..
【问题讨论】:
我有一个由字母和数字组合而成的字符串。对于我的应用程序,我必须用字母和数字分隔一个字符串:例如:如果我的字符串是“12jan”,我必须分别获得“12”“jan”..
【问题讨论】:
$string = "12312313sdfsdf24234";
preg_match_all('/([0-9]+|[a-zA-Z]+)/',$string,$matches);
print_r($matches);
这可能会更好
【讨论】:
preg_match_all('/^(\d+)(\w+)$/', $str, $matches);
var_dump($matches);
$day = $matches[1][0];
$month = $matches[2][0];
当然,这仅在您的字符串与描述的完全一致时才有效“abc123”(没有附加或附加空格)。
如果您想获取所有数字和字符,可以使用一个正则表达式。
preg_match_all('/(\d)|(\w)/', $str, $matches);
$numbers = implode($matches[1]);
$letters = implode($matches[2]);
var_dump($numbers, $letters);
【讨论】:
preg_match_all('/(\d)|(.)|(\w)/', $str, $matches); 也会尊重像 '12-jan' 或 'jan-12' 这样的字符串,如果你也想重用提取的字符的话。
$numbers = preg_replace('/[^0-9]/', '', $str);
$letters = preg_replace('/[^a-zA-Z]/', '', $str);
【讨论】:
试试这个:
$string="12jan";
$chars = '';
$nums = '';
for ($index=0;$index<strlen($string);$index++) {
if(isNumber($string[$index]))
$nums .= $string[$index];
else
$chars .= $string[$index];
}
echo "Chars: -$chars-<br>Nums: -$nums-";
function isNumber($c) {
return preg_match('/[0-9]/', $c);
}
【讨论】:
preg_match() —— 这对这项任务来说开销太大了。我不建议任何研究人员使用此选项。结果,我已经投票并投票删除了这个答案。
您可以使用preg_split 将您的字符串拆分到前面是数字,后面是字母的位置:
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);
<?php
$str = '12jan';
$arr = preg_split('/(?<=[0-9])(?=[a-z]+)/i',$str);
print_r($arr);
结果:
Array
(
[0] => 12
[1] => jan
)
【讨论】:
$str = 12 Jan 那样
[a-z] : [\sa-z]
这符合我的要求,您可以根据自己的要求进行编辑
function stringSeperator($string,$type_return){
$numbers =array();
$alpha = array();
$array = str_split($string);
for($x = 0; $x< count($array); $x++){
if(is_numeric($array[$x]))
array_push($numbers,$array[$x]);
else
array_push($alpha,$array[$x]);
}// end for
$alpha = implode($alpha);
$numbers = implode($numbers);
if($type_return == 'number')
return $numbers;
elseif($type_return == 'alpha')
return $alpha;
}// end function
【讨论】:
您可以通过匹配数字或非数字序列来拆分字符串,然后用\K“忘记”匹配的字符。
preg_split(
'~(?:\d+|\D+)\K~',
$string,
0,
PREG_SPLIT_NO_EMPTY
)
或者您可以使用匹配的数字作为分隔符并在输出中保留分隔符。
preg_split(
'~(\d+)~',
$string,
0,
PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE
)
两种技术的demonstration。
【讨论】: