0

我有包含破折号的字符串 - 字符,我想在遇到第一个破折号之前提取字符串的一部分,除非破折号在单/双引号中。

IE。

Theory 'Gabe B - Tailor' 夹克 - nordstrom.com 我想提取Theory 'Gabe B - Tailor' 夹克

Theory "Gabe B - Tailor" 夹克 - nordstrom.com 我想提取Theory "Gabe B - Tailor" 夹克

Tailor Jacket - 夹克 - nordstrom.com 我想提取Tailor Jacket

我可以使用什么正则表达式与 preg_match 来实现结果?

4

3 回答 3

0

您可以使用这样的表达式来处理单引号和双引号(没有转义):

(?:[^-]+|"[^"]*"|'[^']*')+

或者只是捕获所有内容,直到最后-

(.+)-
于 2013-01-30T21:12:16.577 回答
0

我相信这个正则表达式是你正在寻找的 -

([^-"']|"[^"]*"|'[^']*')*?(?=\s*\-)
于 2013-02-01T09:33:14.190 回答
0

非正则表达式替代品怎么样?

$input = "'Gabe B - Tailor' Jacket - nordstrom.com";

$insideQuotes = false;
for ($i=0 ; $i<strlen($input) ; $i++) {

    if (!$insideQuotes && $input[$i] == "-") {
        break;
    }

    if ($input[$i] == "'" || $input[$i] == '"') {
        $insideQuotes = !$insideQuotes;
        continue;
    }
}

echo substr($input, 0, $i);
于 2013-01-30T21:30:00.397 回答