preg_split一个字符串,不是单引号之间的空格

the*_*ter 3 php regex preg-split

我试图用不在单引号之间的空格pref_split一个字符串.

这是我正在使用的字符串:

'physical memory %'=92%;99;100 'physical memory'=29.69GB;31.68;32;0;32
Run Code Online (Sandbox Code Playgroud)

以下正则表达式模式成功匹配我要拆分的空间:

/\x20(?=[^']*('[^']*'[^']*)*$)\g
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我使用http://www.regexr.com/编写了这个字符串,这是特定于JavaScript正则表达式,我需要这个在PHP中工作.

这是我到目前为止的PHP代码,但它抛出一个错误:

preg_split("/\x20(?=[^']*('[^']*'[^']*)*$)/g", "'physical memory %'=92%;99;100 'physical memory'=29.69GB;31.68;32;0;32");
Run Code Online (Sandbox Code Playgroud)

错误:

preg_split(): Unknown modifier 'g'
Run Code Online (Sandbox Code Playgroud)

如果我删除/和/ g我收到以下错误:

preg_match_all(): Compilation failed: nothing to repeat at offset 0
Run Code Online (Sandbox Code Playgroud)

我的猜测是,由于某种原因,PHP中的正则表达式不匹配任何值,因此无法拆分字符串.有人可以帮忙解决这个问题吗?

谢谢.

hwn*_*wnd 5

g从正则表达式中删除(全局)修饰符.

preg_split("/\x20(?=[^']*('[^']*'[^']*)*$)/", "'physical memory %'=92%;99;100 'physical memory'=29.69GB;31.68;32;0;32");
Run Code Online (Sandbox Code Playgroud)

工作演示

虽然您的正则表达式可以使用,但您可以使用以下内容,这样可以更容易忽略引号中的空格字符.

$results = preg_split("/'[^']*'(*SKIP)(*F)|\x20/", $str);
print_r($results);
Run Code Online (Sandbox Code Playgroud)

说明:

我们的想法是跳过单引号中的内容.我首先匹配引号后跟任何字符',然后是单引号,然后使子模式失败并强制正则表达式引擎不使用另一个带有(*SKIP)(*F)回溯控制谓词的替代方法重试子字符串.

产量

Array
(
    [0] => 'physical memory %'=92%;99;100
    [1] => 'physical memory'=29.69GB;31.68;32;0;32
)
Run Code Online (Sandbox Code Playgroud)