PHP在打开括号之前提取一个单词

时间:2012-04-19 17:38:47

标签: php regex

我有一个字符串,

  

三星Galaxy Ace S5830(Onyx Black)
  三星Galaxy Y Color Plus S5360(金属灰)
  HTC雷达(白银)
  Micromax X560

我如何提取像

这样的特定字符串
  

Ace s5830
  Y color Plus s5360
  雷达
  X560

来自字符串。

6 个答案:

答案 0 :(得分: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"]

答案 1 :(得分:1)

使用split()。

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

就是这样。

答案 2 :(得分:1)

你可以获得像

这样的字符串
Samsung Galaxy Ace S5830
HTC Radar

简单:

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

,但如果没有所有可能的制造商列表,您永远不能自动从字符串中删除制造商名称。没有办法自动确定制造商的结束位置和模型的开始。

答案 3 :(得分:1)

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

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

这分裂在(上,在第一次开场之前拿走了所有内容。然后它会在空格上拆分,删除字符串中的第一个单词,然后将其余的字符串重新连接起来。

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

答案 4 :(得分:1)

请使用:

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

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

现在,您将在Samsung Galaxy Ace S5830

中获取字符串:$res

答案 5 :(得分:1)

使用preg_match函数:

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

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