用preg_match提取字符串

时间:2013-01-30 21:06:35

标签: php regex

我有包含短划线字符的字符串,我想在遇到第一个短划线字符之前提取字符串的部分除了,如果短划线是单/双引号。

理论'Gabe B - 裁缝'夹克 - nordstrom.com 我想提取理论'Gabe B - 裁缝'夹克

理论“Gabe B - Tailor”Jacket - nordstrom.com 我想提取理论“Gabe B - Tailor”Jacket

裁缝夹克 - 夹克 - nordstrom.com 我想提取裁缝夹克

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

3 个答案:

答案 0 :(得分:0)

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

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

或者直到最后-

捕获所有内容
(.+)-

答案 1 :(得分: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);

答案 2 :(得分:0)

我相信这个正则表达式正是你所寻求的 -

([^-"']|"[^"]*"|'[^']*')*?(?=\s*\-)