如何使用正则表达式按符号拆分字符串?

How to split out string by symbols using regex?

我有这样的输入字符串

"CC", 5, "B7C15", "B4C8"

我通过 preg_split 方法拆分了这个字符串。 但是当输入字符串 $str = 'CC'; 方法不起作用。 我的代码:

preg_split('/(\d+)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

我得到输出结果:

array(4) {
  [0]=>
  string(1) "B"
  [1]=>
  string(1) "7"
  [2]=>
  string(1) "C"
  [3]=>
  string(2) "15"
}
array(1) {
  [0]=>
  string(1) "5"
}
array(4) {
  [0]=>
  string(1) "B"
  [1]=>
  string(1) "4"
  [2]=>
  string(1) "C"
  [3]=>
  string(2) "8"
}

而不是以下结果:

array(1) {
  [0]=>
  string(2) "CC"
} 

我需要得到如下结果:

array(2) {
  [0]=>
  string(1) "C"
  [1]=>
  string(1) "C"
}

感谢提前。

更好的方法是使用:

preg_match_all( '/(\d+)|([a-z])/i', $string, $matches );

print_r($matches);

如果您需要将任何非数字字符序列拆分为一个字符元素,您只需添加 (\D)(单个非数字字符组)作为正则表达式的替代:

preg_split('/(\d+)|(\D)/', $string, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);

演示:https://regex101.com/r/zFHybU/1

您正在查看的文件格式称为 CSV,在解析时有很多陷阱。与其使用正则表达式编写自己的解析器,不如使用现有工具。

如果您从文件中读取这些内容,请使用 PHP 中内置的 fgetcsv 函数。