我试图用不在单引号之间的空格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中的正则表达式并不匹配任何值,因此无法拆分字符串。有人可以帮忙解决这个问题吗?
谢谢。
答案 0 :(得分:5)
从正则表达式中删除g
(全局)修饰符。
preg_split("/\x20(?=[^']*('[^']*'[^']*)*$)/", "'physical memory %'=92%;99;100 'physical memory'=29.69GB;31.68;32;0;32");
虽然您的正则表达式可以使用,但您可以使用以下内容,这样可以更容易忽略引号中的空格字符。
$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");