是否可以使用PHP和preg_match_all将以下字符串转换为数组,例如:PHP正则表达式分割为二维数组?
该字符串将始终是一个字符和数字后跟一个空格。
String: "C1 X2 B10"
$array[0][type]=>"C"
$array[0][number]=>1
$array[1][type]=>"X"
$array[1][number]=>2
$array[2][type]=>"B"
$array[2][number]=>10
是否可以使用PHP和preg_match_all将以下字符串转换为数组,例如:PHP正则表达式分割为二维数组?
该字符串将始终是一个字符和数字后跟一个空格。
String: "C1 X2 B10"
$array[0][type]=>"C"
$array[0][number]=>1
$array[1][type]=>"X"
$array[1][number]=>2
$array[2][type]=>"B"
$array[2][number]=>10
您可以使用命名组在正则表达式:
$str = "C1 X2 B10";
$re = '~(?P<type>[A-Z])(?P<number>\d+)~';
preg_match_all($re, $str, $m, PREG_SET_ORDER);
print_r($m);
,让你
Array
(
[0] => Array
(
[0] => C1
[type] => C
[1] => C
[number] => 1
[2] => 1
)
[1] => Array
(
[0] => X2
[type] => X
[1] => X
[number] => 2
[2] => 2
)
etc
这样你就可以直接使用$m[1]['type']
。
完美,谢谢,这就是我以后的样子。 – aevans 2014-10-30 11:51:29
当然,你可以随时使用这个正则表达式是WAAAAY快,但我想告诉你,你可以不用正则表达式。有更多的方法来解决问题。哈维幽灵,从“西装”的字符会说:“如果有人指出用枪指着你的头,还有146点的方式,你可以为自己辩护”;)
这里...试试这个:
$string = 'C1 X2 B10';
$explode = explode(' ', $string);
$i = 0;
foreach ($explode as $exp){
$number = substr($exp, 1);
$letter = substr($exp, 0, 1);
$array[$i]['type'] = $letter;
$array[$i]['number'] = $number;
$i++;
}
echo '<pre>';
print_r($array);
echo '</pre>';
输出将是:
Array
(
[0] => Array
(
[type] => C
[number] => 1
)
[1] => Array
(
[type] => X
[number] => 2
)
[2] => Array
(
[type] => B
[number] => 10
)
)
警告!只有在开头只有一个字母的情况下,此解决方案才能正常工作,并且字符串中的元素空间分隔!
希望这会有所帮助! :d
你真的不需要正则表达式来做到这一点......你可以爆炸“”(空格)上的字符串,然后从数字中分离出字母并创建你的数组:) – 2014-10-29 13:16:28
我修改了我原来的问题,增加了字符串的变体。 – aevans 2014-10-29 17:07:41