如何使用PHP的preg_split分割指定字符串并得到目标数组?
用preg_split分割特定条件字符串的解决方案
我明白你想要把那段包含多个条件分支的字符串分割成独立的条件片段,刚好可以通过正向断言来精准定位分割点,避免误分割字符串内部的逗号。
首先来看你的原始字符串:
selectedvalue == product || product condition || product flush then @"yes,no",selectedvalue == water || water condition || water flush then @"true,false"
我们需要分割的位置是在第一个条件的闭合双引号"之后、下一个条件开头selectedvalue == 之前的逗号。这里可以用preg_split结合正则的后顾前瞻断言来实现,不会消耗分割点的字符,确保每个片段完整。
实现代码
$inputStr = 'selectedvalue == product || product condition || product flush then @"yes,no",selectedvalue == water || water condition || water flush then @"true,false"'; $resultArray = preg_split('/(?<="@"),(?=selectedvalue == )/', $inputStr); print_r($resultArray);
正则表达式解释
(?<="@"):正向后顾断言,确保当前位置的前一个字符是闭合的双引号"(也就是每个条件片段的结尾标记),:匹配我们用来分割的逗号(?=selectedvalue == ):正向前瞻断言,确保逗号后面紧跟的是新条件的开头selectedvalue ==,这样就能精准定位到我们需要的分割点,而不会误分割@"yes,no"这类内部的逗号
运行这段代码后,你就能得到想要的数组:
Array ( [0] => selectedvalue == product || product condition || product flush then @"yes,no" [1] => selectedvalue == water || water condition || water flush then @"true,false" )
这个方案还能扩展到更多类似的条件片段,只要每个片段都是以then @"..."结尾、下一个片段以selectedvalue == 开头,就能正确分割。
内容的提问来源于stack exchange,提问作者rajesh
相关产品推荐
相关产品推荐

