我有一个像这样的字符串,
三星 Galaxy Ace S5830(缟玛瑙黑)
三星 Galaxy Y Color Plus S5360(金属灰)
HTC Radar(白银)
Micromax X560
我如何提取特定的字符串,例如
王牌 s5830
Y color Plus s5360
雷达
X560
从字符串。
你必须有制造商的名单,但如果你有,那么你可以做这样的事情:
$MANUFACTURERS = array(
"Samsung",
"HTC",
"Micromax"
);
$descriptions = array(
"Samsung Galaxy Ace S5830 (Onyx Black)",
"Samsung Galaxy Y Color Plus S5360 (Metallic Grey)",
"HTC Radar (White Silver)",
"Micromax X560"
);
$models = preg_replace(
array_map(function($manufacturer) {
// Build a regex for each manufacturer
return '/^'. preg_quote($manufacturer) .'\\s*|\\s*\\(.*\\)$/';
}, $MANUFACTURERS),
'', // Replace manufacturer and color with an empty string
$descriptions
);
输出($models
):["Galaxy Ace S5830","Galaxy Y Color Plus S5360","Radar","X560"]
使用拆分()。
首先使用 '('分割& 然后使用 ' ' (空格) 分割& 选择数组的最后一个元素。
就是这样。
你可以得到像这样的字符串
Samsung Galaxy Ace S5830
HTC Radar
有一个简单的:
$paren_position = strpos($input, '(');
if ($paren_position !== false) {
$output = substr($input, 0, $paren_position);
} else {
$output = $input;
}
,但如果没有所有可能制造商的列表,则永远无法自动从字符串中删除制造商名称。没有办法自动确定制造商的终点和模型的起点。
这需要您不想删除的前缀字符串列表,除非您的示例错误并且"Galaxy Ace S5830"
是可接受的输出。在这种情况下:
$bits = explode('(', $string);
$bits = explode(' ', $bits[0]);
array_shift($bits);
$out = trim(implode(' ', $bits));
这会分裂(
,在第一个开放括号之前获取所有内容。然后它在空间上拆分,删除字符串中的第一个单词,然后将字符串的其余部分重新连接在一起。
示例代码和输出:http ://codepad.org/Uxni2Xbr
只需使用这个:
$str = "Samsung Galaxy Ace S5830 (Onyx Black)";
$res = preg_split("/\s*\(/",$str);
$res = $res[0];
您现在将获得字符串:Samsung Galaxy Ace S5830
in$res
使用 preg_match 函数:
preg_match('/([^(]+)/', "Samsung Galaxy Ace S5830 (Onyx Black)", $matches);