0

ダッシュ文字を含む文字列があります。ダッシュが一重引用符または二重引用符で囲まれている場合を除き、最初のダッシュ文字が検出される前の文字列の部分を抽出したいと考えています。

すなわち。

Theory 'Gabe B - Tailor' Jacket - nordstrom.comセオリー 'Gabe B - Tailor' Jacket を抽出したい

Theory "Gabe B - Tailor" Jacket - nordstrom.com 抽出したいTheory "Gabe B - Tailor" Jacket

テーラージャケット - ジャケット - nordstrom.comテーラージャケット を抽出したい

結果を得るために preg_match で使用できる正規表現は何ですか?

4

3 に答える 3

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 に答える
0

次のような式を使用して、一重引用符と二重引用符を処理できます (エスケープなし)。

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

または、最後まですべてをキャプチャします-

(.+)-
于 2013-01-30T21:12:16.577 に答える