这是我想要运行的代码:
$str = 'a,b,c,d';
return preg_split('/(?<![^\\\\][\\\\]),/', $str);
正则表达式如下所示:
/(?<![^\\][\\]),/
这是一个简单的固定长度的负回顾后发现,用于“前面不是反斜杠然后是任意字符”。
这个正则表达式在http://www.phpliveregex.com上运行得非常好。
但是当我尝试运行以上代码时,出现错误:
Warning: preg_split() [function.preg-split]: Compilation failed: lookbehind assertion is not fixed length at offset 13
更糟糕的是,一位程序员在他的5.4.24 PHP服务器上测试了这段代码,它运行得很好。
这让我相信我的问题与我几乎无法控制的服务器配置有关。我被告知我的PHP版本为5.2.*
是否有任何绕过/替代preg_replace()的方法?
'/(?<!(?<!\\\\)\\\\),/'
,它在所有版本中都能成功匹配(注意:修复了先前版本评论中的逻辑错误)。 - Wrikkena\\\,b
?(或:使用转义引号的'a\\\\\\,b'
)。 - Wrikkenpreg_match_all('/(?:[^\\\\,]|\\\\.)+/u',$str,$matches);
(旧的“不是转义或定界符,或者是直接跟随任何你喜欢的转义 - 序列”) - Wrikken