我正在尝试在php中编写一个正则表达式,以将字符串拆分为数组。 字符串是
#000000 | Black #ffffff | White #ff0000 | Red
字符和
之间可以有空格|
所以正则表达式需要使用
#000000|Black #ffffff|White #ff0000|Red
第二种类型的字符串有效。
$str = preg_split('/[\s]+/', $str);
如何修改它以使其与第一个和第二个两个字符串一起使用?
编辑:最终输出必须为
Array ( [0] => Array ( [0] => #000000 [1] => Black ) [1] => Array ( [0] => #ffffff [1] => White ) [2] => Array ( [0] => #ff0000 [1] => Red) )
答案 0 :(得分:1)
您需要先使用此正则表达式拆分两次,
'/ (?=#)/'
然后使用此正则表达式
'/\s*\|\s*/'
这是一个php代码,
$str = "#000000|Black #ffffff|White #ff0000|Red";
$str = preg_split('/ (?=#)/', $str);
for ($i = 0;$i<sizeOf($str);$i++) {
$str[$i] = preg_split('/\s*\|\s*/', $str[$i]);
}
print_r($str);
这将提供以下输出,
Array
(
[0] => Array
(
[0] => #000000
[1] => Black
)
[1] => Array
(
[0] => #ffffff
[1] => White
)
[2] => Array
(
[0] => #ff0000
[1] => Red
)
)
对于此字符串“#ff0000 |#ff0000”,它提供以下输出,这是您想要的。
Array
(
[0] => Array
(
[0] => #ff0000
[1] => #ff0000
)
)
答案 1 :(得分:1)
我建议仅生成一个颜色名称到十六进制值的平面图。这是通过一次调用preg_split
来实现的。我们可以尝试分割以下正则表达式模式:
\s*\|\s*|\s+(?=#)
这表示要在\s*\|\s*
或\s+(?=#)
上进行拆分,这是空白,其后是十六进制颜色文字的哈希值。
$input = "#000000 | Black #ffffff | White #ff0000 | Red";
$array = preg_split("/\\s*\\|\\s*|\\s+(?=#)/", $input);
$map = array();
for ($i=0; $i < count($array); $i+=2) {
$map[$array[$i]] = $array[$i+1];
}
print_r($map);
Array ( [#000000] => Black [#ffffff] => White [#ff0000] => Red )
我没有提供您期望的确切输出,但是我也看不到有任何关联数组的原因。如果确实需要,请使用以下代码:
$input = "#000000 | Black #ffffff | White #ff0000 | Red";
$array = preg_split("/\s*\|\s*|\s+(?=#)/", $input);
$output = array();
for ($i=0; $i < count($array); $i+=2) {
$map = array();
$map[$array[$i]] = $array[$i+1];
$output[count($output)] = $map;
}
print_r($output);
Array ( [0] => Array ( [#000000] => Black ) [1] => Array ( [#ffffff] => White )
[2] => Array ( [#ff0000] => Red ) )