繁体   English   中英

用preg_match提取字符串

[英]extracting string with preg_match

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

即。

理论“ Gabe B-裁缝”夹克-nordstrom.com我要提取理论“ Gabe B-裁缝”夹克

理论“ Gabe B-裁缝”夹克-nordstrom.com我要提取理论“ Gabe B-裁缝”夹克

裁缝外套-夹克-nordstrom.com我要提取裁缝外套

我可以在preg_match中使用什么正则表达式来达到结果?

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

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

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

(.+)-

非正则表达式的替代品呢?

$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);

我相信您正在寻找此正则表达式-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM