【问题标题】:Split string on semicolons immediately followed by 7 digital charactersphp根据模式拆分字符串
【发布时间】:2017-05-07 12:12:05
【问题描述】:

我有一个这样的字符串:

2234323,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433;4534453,23,23,44,433;
3,23,44,433;23,23,44,433;23,23,44,433
7545455,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433

如您所见,值之间有分号。我想根据“仅 7 位值之前的分号”拆分此字符串,所以我应该有这个。

>2234323,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433
>4534453,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433;
>7545455,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433

我唯一能想到的是explode(';',$string),但这会返回:

>2234323,23,23,44,433;
>3,23,44,433;
>23,23,44,433;
>23,23,44,433
>4534453,23,23,44,433;
>3,23,44,433;
>23,23,44,433;23,23,44,433;
>7545455,23,23,44,433;
>3,23,44,433;23,23,44,433;
>23,23,44,433

有没有什么快速的方法可以根据“;”来分割这种格式的字符串?前 7 位数值??

【问题讨论】:

  • 使用正则表达式匹配分号 (;) 和逗号 (,)。 array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] ) 使用 preg_split()。

标签: php arrays regex string split


【解决方案1】:

您可以为此使用preg_split

$s = '2234323,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433;4534453,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433;7545455,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433';
var_dump(preg_split('/(;\d{7},)/', $s, -1, PREG_SPLIT_DELIM_CAPTURE));

你的输出将是

array(5) {
  [0] =>
  string(58) "2234323,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433"
  [1] =>
  string(9) ";4534453,"
  [2] =>
  string(50) "23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433"
  [3] =>
  string(9) ";7545455,"
  [4] =>
  string(50) "23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433"
}

我认为接下来的事情(结合第一个和第二个元素,然后是第三个和第四个元素)没什么大不了的 :)

如果您仍然在这里遇到问题,请告诉我。

【讨论】:

    【解决方案2】:

    您可以对七位数长的数字进行查找和替换,以插入可用于拆分的标记。输出可能需要一些额外的过滤才能达到您想要的格式。

    <?php
    $in =<<<IN
    2234323,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433;4534453,23,23,44,433;
    3,23,44,433;23,23,44,433;23,23,44,433
    7545455,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433
    IN;
    
    $out = preg_replace('/([0-9]{7})/', "@$1", $in);
    $out = explode('@', $out);
    $out = array_filter($out);
    
    var_export($out);
    

    输出:

    array (
      1 => '2234323,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433;',
      2 => '4534453,23,23,44,433;
    3,23,44,433;23,23,44,433;23,23,44,433
    ',
      3 => '7545455,23,23,44,433;3,23,44,433;23,23,44,433;23,23,44,433',
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2018-05-12
      • 2021-04-17
      • 1970-01-01
      • 2019-09-19
      相关资源
      最近更新 更多