使用逗號分割文字同時保留引號
解析逗號分隔的文字時,處理逗號出現在帶引號的子字串中的情況非常重要,例如這個例子:
123,test,444,"don't split, this",more test,1
分割這個使用預設的String.split(",") 方法以逗號分隔字串會產生:
123 test 444 "don't split this" more test 1
如您所見,「don't split, this」引號中的逗號被錯誤地解釋為分隔符.
要解決這個問題,需要更複雜的方法。在這種情況下,我們可以使用正規表示式以逗號分隔字串,而逗號後面不跟偶數個雙引號。這可確保帶引號的子字串內的逗號不會被誤認為分隔符號。
str.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
此正規表示式使用下列邏輯:
(?=):向前看斷言確保:
換句話說,先前瞻檢查目前逗號後面是否有偶數個雙引號以及字串結尾(如果是的話)。 ,表示逗號不在引號的子字串內,可以被視為分隔符,否則,逗號將被忽略。
在此版本中,修飾符(?x) 用於透過忽略空白字元來增強正規表示式的可讀性。以上是如何在保留引號的同時拆分逗號分隔的文字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!