【问题标题】:How to split out string by symbols using regex?如何使用正则表达式按符号拆分字符串?
【发布时间】:2017-03-12 12:33:56
【问题描述】:

我有这样的输入字符串

“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
  • 寻找现有的 CSV 解析工具,而不是自己动手。

标签: php arrays regex preg-split


【解决方案1】:

更好的方法是使用:

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

print_r($matches);

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢 :)
    【解决方案3】:

    您正在查看的文件格式称为 CSV,并且在解析中存在许多问题。与其使用正则表达式编写自己的解析器,不如使用现有工具。

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

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2011-12-28
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多