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

时间:2014-07-03 16:07:38

标签: php regex preg-split

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

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

'physical memory %'=92%;99;100 'physical memory'=29.69GB;31.68;32;0;32

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

/\x20(?=[^']*('[^']*'[^']*)*$)\g

我遇到的问题是我使用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");

错误:

preg_split(): Unknown modifier 'g'

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

preg_match_all(): Compilation failed: nothing to repeat at offset 0

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

谢谢。

2 个答案:

答案 0 :(得分:5)

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

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

Working Demo

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

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

<强>解释

这个想法是跳过单引号中的内容。我首先匹配引号后跟除'之外的任何字符,然后是单引号,然后使子模式失败并强制正则表达式引擎不使用(*SKIP)和{的另一个替代方法重试子字符串{1}}回溯控制动词。

<强>输出

(*F)

答案 1 :(得分:1)

PCRE reges has no global modifier

只需从正则表达式中删除/g修饰符。

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