preg_match() 将一个字符串拆分为另一个不在撇号中的字符串

preg_match() to split a string by another string which is not in apostrophes

我有很多这样的字符串:

parameter_1 >= '23' AND parameter_2 like 'cucurigu AND \picaso' AND parameter_3 IS NULL

我想在每个不在撇号内的 AND 之后创建一个 preg_split()。 $matches 的输出应该是一个

的数组
0 => parameter_1 >= '23'
1 => parameter_2 like 'cucurigu AND \picaso'
2 => parameter_3 IS NULL

我不知道怎么用。我确信有一个简单的解决方案可以使用 preg_split() 来完成此操作。不幸的是 explode() 不能做我需要的。 目前我有一个巨大的代码,它逐个字符地进行处理,并将字符串拆分为一个数组,如上所示。我需要将这个大代码更新为一个小代码,因为我的任务经常变化。

P.S。如果有人愿意帮助我,请添加对 $pattern 的解释。

给你,你可以使用skip/fail PCRE技巧,只捕获单引号外的AND

'[^']*?'(*SKIP)(*F)|AND

demo

result:

Array                                                                                                                                                                                                                                                  
(                                                                                                                                                                                                                                                      
    [0] => parameter_1 >= '23'                                                                                                                                                                                                                         
    [1] =>  parameter_2 like 'cucurigu AND \picaso'                                                                                                                                                                                                    
    [2] =>  parameter_3 IS NULL                                                                                                                                                                                                                        
)

说明: 我们用 '[^']*?'(*SKIP)(*F) 跳过单引号内的所有内容,并在所有上下文中匹配 AND