0

我有一个像这样的字符串,

三星 Galaxy Ace S5830(缟玛瑙黑)
三星 Galaxy Y Color Plus S5360(金属灰)
HTC Radar(白银)
Micromax X560

我如何提取特定的字符串,例如

王牌 s5830
Y color Plus s5360
雷达
X560

从字符串。

4

6 回答 6

2

你必须有制造商的名单,但如果你有,那么你可以做这样的事情:

$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"]

于 2012-04-19T18:00:10.913 回答
1

使用拆分()。

首先使用 '('分割& 然后使用 ' ' (空格) 分割& 选择数组的最后一个元素

就是这样。

于 2012-04-19T17:44:27.673 回答
1

你可以得到像这样的字符串

Samsung Galaxy Ace S5830
HTC Radar

有一个简单的:

$paren_position = strpos($input, '(');
if ($paren_position !== false) {
   $output = substr($input, 0, $paren_position);
} else {
   $output = $input;
}

,但如果没有所有可能制造商的列表,则永远无法自动从字符串中删除制造商名称。没有办法自动确定制造商的终点和模型的起点。

于 2012-04-19T17:48:14.163 回答
1

这需要您不想删除的前缀字符串列表,除非您的示例错误并且"Galaxy Ace S5830"是可接受的输出。在这种情况下:

$bits = explode('(', $string);
$bits = explode(' ', $bits[0]);
array_shift($bits);
$out = trim(implode(' ', $bits));

这会分裂(,在第一个开放括号之前获取所有内容。然后它在空间上拆分,删除字符串中的第一个单词,然后将字符串的其余部分重新连接在一起。

示例代码和输出:http ://codepad.org/Uxni2Xbr

于 2012-04-19T17:51:06.660 回答
1

只需使用这个:

$str = "Samsung Galaxy Ace S5830 (Onyx Black)";

$res = preg_split("/\s*\(/",$str);
$res = $res[0];

您现在将获得字符串:Samsung Galaxy Ace S5830in$res

于 2012-04-19T17:52:50.400 回答
1

使用 preg_match 函数:

preg_match('/([^(]+)/', "Samsung Galaxy Ace S5830 (Onyx Black)", $matches);

http://php.net/manual/en/function.preg-match.php

于 2012-04-19T17:52:50.590 回答