php使字符串不含转移,php – 不在()之间分解字符串

该博客讨论了如何在PHP中使用preg_split函数,通过正则表达式分割字符串,以避免在括号内的逗号。示例代码演示了如何正确地按逗号分隔字符串,同时保持括号内的完整项。问题在于explode函数不能处理这种情况,而preg_split提供了一个解决方案,能够识别并保留括号内的内容。
摘要由CSDN通过智能技术生成

我试图通过逗号来爆炸一个字符串:但只有当它不在括号之间时(…)

这里有一些代码来说明我的意思:

$string = "K.VisueelNr,IFNULL(P.Partijnaam, 'Leeg gemeld') AS Partijnaam,R.Ras,M.Maat,DATE_FORMAT(KS.Timestamp, '%d-%c-%Y') AS Datum,H.Handelshuis,KS.Actie";

print_r(str_getcsv($string, '()'));

print_r(explode(",", $string));

哪个会输出:

Array

(

[0] => K.VisueelNr,IFNULL

[1] => P.Partijnaam, 'Leeg gemeld') AS Partijnaam,R.Ras,M.Maat,DATE_FORMAT

[2] => KS.Timestamp, '%d-%c-%Y') AS Datum,H.Handelshuis,KS.Actie

)

Array

(

[0] => K.VisueelNr

[1] => IFNULL(P.Partijnaam

[2] => 'Leeg gemeld') AS Partijnaam

[3] => R.Ras

[4] => M.Maat

[5] => DATE_FORMAT(KS.Timestamp

[6] => '%d-%c-%Y') AS Datum

[7] => H.Handelshuis

[8] => KS.Actie

)

但我正在寻找这样的输出:

Array

(

[0] => K.VisueelNr

[1] => IFNULL(P.Partijnaam, 'Leeg gemeld') AS Partijnaam

[2] => R.Ras

[3] => M.Maat

[4] => DATE_FORMAT(KS.Timestamp, '%d-%c-%Y') AS Datum

[5] => H.Handelshuis

[6] => KS.Actie

)

也许它必须用preg_split完成,但我不知道正则表达式会是什么样子……

解决方法:

你需要使用preg_split,它根据给定的正则表达式分割输入.

$words = preg_split('~,(?![^()]*\))~', $str);

print_r($words);

说明:

>,匹配所有逗号,只有它不匹配

>后跟任何char但不是(或),零次或多次

>然后是一个结束括号.

如果你改变(?!to(?=,它与匹配括号内的所有逗号相反).

标签:php,regex,delimiter,explode

来源: https://codeday.me/bug/20190623/1273580.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值