我有看起来像这样的字符串:
"size:34,35,36,36,37|color:blue,red,white"
是否可以匹配 preg_match(_all) 中的所有颜色?这样我会在输出数组中得到“蓝色”、“红色”和“白色”?
颜色可以是任何颜色,所以我不能去(蓝色|红色|白色)
我有看起来像这样的字符串:
"size:34,35,36,36,37|color:blue,red,white"
是否可以匹配 preg_match(_all) 中的所有颜色?这样我会在输出数组中得到“蓝色”、“红色”和“白色”?
颜色可以是任何颜色,所以我不能去(蓝色|红色|白色)
|
:
,
???
恕我直言,使用其他答案中建议的正则表达式是一个比这样简单的解决方案更“丑陋”的解决方案:
$input = 'size:34,35,36,36,37|color:blue,red,white|undercoating:yes,no,maybe,42';
function get_option($name, $string) {
$raw_opts = explode('|', $string);
$pattern = sprintf('/^%s:/', $name);
foreach( $raw_opts as $opt_str ) {
if( preg_match($pattern, $opt_str) ) {
$temp = explode(':', $opt_str);
return $opts = explode(',', $temp[1]);
}
}
return false; //no match
}
function get_all_options($string) {
$options = array();
$raw_opts = explode('|', $string);
foreach( $raw_opts as $opt_str ) {
$temp = explode(':', $opt_str);
$options[$temp[0]] = explode(',', $temp[1]);
}
return $options;
}
print_r(get_option('undercoating', $input));
print_r(get_all_options($input));
输出:
Array
(
[0] => yes
[1] => no
[2] => maybe
[3] => 42
)
Array
(
[size] => Array
(
[0] => 34
[1] => 35
[2] => 36
[3] => 36
[4] => 37
)
[color] => Array
(
[0] => blue
[1] => red
[2] => white
)
[undercoating] => Array
(
[0] => yes
[1] => no
[2] => maybe
[3] => 42
)
)
你可以用一种方式来实现它,preg_match_all()
但我建议你用explode代替。
preg_match_all('/([a-z]+)(?:,|$)/', "size:34,35,36,36,37|color:blue,red,white", $a);
print_r($a[1]);