正则表达式用于分割所有未转义的分号

Cor*_*art 5 php regex preg-replace

我正在使用php的preg_split来分割基于分号的字符串,但是我需要它才能在非转义的分号上拆分.

<?
$str = "abc;def\\;abc;def";
$arr = preg_split("/;/", $str);
print_r($arr);
?>
Run Code Online (Sandbox Code Playgroud)

生产:

Array
(
    [0] => abc
    [1] => def\
    [2] => abc
    [3] => def
)
Run Code Online (Sandbox Code Playgroud)

当我想要它产生:

Array
(
    [0] => abc
    [1] => def\;abc
    [2] => def
)
Run Code Online (Sandbox Code Playgroud)

我试过了"/(^\\)?;/","/[^\\]?;/"但他们都产生了错误.有任何想法吗?

Nil*_*ann 5

这有效.

<?
  $str = "abc;def\;abc;def";
  $arr = preg_split('/(?<!\\\);/', $str);
  print_r($arr);
?>
Run Code Online (Sandbox Code Playgroud)

它输出:

Array
(
    [0] => abc
    [1] => def\;abc
    [2] => def
) 
Run Code Online (Sandbox Code Playgroud)

你需要使用负面的lookbehind(阅读有关lookarounds).想想"匹配所有";' 除非前面有'\'".