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

时间:2015-04-20 08:29:00

标签: php regex preg-split

我有很多这样的字符串:

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()无法满足我的需求。 目前,我有一个巨大的代码,它通过char进行char,并将字符串拆分为如上所示的数组。我需要将这个大代码更新为一个小代码,因为我的任务经常发生变化。

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

1 个答案:

答案 0 :(得分:4)

在这里,你可以使用跳过/失败的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