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

PHP在开括号前提取一个单词,php,regex,Php,Regex,我有一根弦 三星Galaxy Ace S5830(玛瑙黑) 三星Galaxy Y Color Plus S5360(金属灰) HTC雷达(银白色) Micromax X560 如何提取特定字符串,如 Ace s5830 Y颜色加s5360 雷达 X560 从字符串中。使用split() 首先使用“(”,然后使用“”(空格)拆分&选择数组的最后一个元素 就是这样。您可以得到如下字符串 Samsung Galaxy Ace S5830 HTC Radar 用一个简单的例子: $paren_posi

我有一根弦

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

如何提取特定字符串,如

Ace s5830
Y颜色加s5360
雷达
X560

从字符串中。使用split()

首先使用“(”,然后使用“”(空格)拆分&选择数组的最后一个元素


就是这样。

您可以得到如下字符串

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));
这将在
)上拆分,在第一次打开paren之前获取所有内容。然后在空格上拆分,删除字符串中的第一个单词,然后将其余字符串重新连接在一起

示例代码和输出:

只需使用以下命令:

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

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

现在您将在
$res
中获得字符串:
三星Galaxy Ace S5830
使用预匹配功能:

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

请参见

您必须有制造商列表,但如果您有制造商列表,则可以执行以下操作:

$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”、“雷达”、“X560”]

您有输入字符串的完整列表还是所需输出字符串的完整列表?当您说“特定字符串”时也是如此",你说的具体字符串是什么?你给出的示例没有明确的模式…看起来你想要模型名称,方法是删除参数中的制造商名称和颜色。这不是自动实现的,你需要制造商列表,并且颜色总是需要在括号中。为什么您删除了Galaxy,但没有删除雷达?您有制造商列表吗?