我有包含短划线字符的字符串,我想在遇到第一个短划线字符之前提取字符串的部分除了,如果短划线是单/双引号。
即
理论'Gabe B - 裁缝'夹克 - nordstrom.com 我想提取理论'Gabe B - 裁缝'夹克
理论“Gabe B - Tailor”Jacket - nordstrom.com 我想提取理论“Gabe B - Tailor”Jacket
裁缝夹克 - 夹克 - nordstrom.com 我想提取裁缝夹克
我可以使用什么正则表达式与preg_match来实现结果?
答案 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*\-)