在分隔符上分割字符串,除非包含在单引号或双引号中

Xii*_*ref 5 php regex string split preg-split

我有一个像这样的字符串aa | bb | "cc | dd" | 'ee | ff',我正在寻找一种方法来分割它,以获得由字符分隔的所有值,|但字符串中包含的除外|

我们的想法是得到这样的东西[a, b, "cc | dd", 'ee | ff']

我已经在这里找到了类似问题的答案:https ://stackoverflow.com/a/11457952/11260467

然而,我找不到一种方法来适应具有多个分隔符的情况,这里有人在正则表​​达式方面比我不那么愚蠢吗?

Jan*_*Jan 5

(*SKIP)(*FAIL)通过提供的功能可以轻松完成此操作pcre

(['"]).*?\1(*SKIP)(*FAIL)|\s*\|\s*
Run Code Online (Sandbox Code Playgroud)

PHP可能是:

<?php

$string = "aa | bb | \"cc | dd\" | 'ee | ff'";

$pattern = '~([\'"]).*?\1(*SKIP)(*FAIL)|\s*\|\s*~';

$splitted = preg_split($pattern, $string);
print_r($splitted);
?>
Run Code Online (Sandbox Code Playgroud)

并且会产生

Array
(
    [0] => aa
    [1] => bb
    [2] => "cc | dd"
    [3] => 'ee | ff'
)
Run Code Online (Sandbox Code Playgroud)

请参阅regex101.com和ideone.com 上的演示