如何使用php preg_split分割字符串并保留部分使用的分隔符?

如何使用php preg_split分割字符串并保留部分使用的分隔符?

问题描述:

I need to use preg_split to split the string below by using "};{" as the delimiter. But I want to keep/return the } and { in the returned array.

Regex can do so much, but wondering if this is possible using preg_split.

{'aid':10,'aSL'{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0},'hs':'4.8','l_p':1229241600},{'aid':80,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}},{'aid':100,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}},{'aid':30,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}},{'aid':40,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}},{'aid':60,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}}

I want it to return like this

[0] => {'aid':10,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0},'hs':'4.8','l_p':1229241600}
[1] => {'aid':80,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}
[2] => {'aid':100,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}
[3] => {'aid':30,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}
[4] => {'aid':40,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}
[5] => {'aid':60,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}

我需要使用preg_split来分隔下面的字符串,使用“}; {”作为分隔符。 但是我想在返回的数组中保留/返回} code>和 { code>。 p>

Regex可以做很多事,但想知道是否 这可以使用preg_split。 p>

  {'aid':10,'aSL'{'ac':true,'g_ac':true,'stats':0,'  LDB ':0,' G _ ':0},' HS ':' 4.8' , 'L_P':1229241600},{ '援助':80, 'ASL':{ 'AC':0,1 'g_ac':0  '统计':0, 'LDB':0, 'G _':0}},{ '援助':100, 'ASL':{ 'AC':0,1 'g_ac':0, '统计':0  , 'LDB':0, 'G _':0}},{ '援助':30, 'ASL':{ 'AC':真, 'g_ac':真, '统计':0, 'LDB':0  , 'G _':0}},{ '援助':40, 'ASL':{ 'AC':0,1 'g_ac':0, '统计':0, 'LDB':0, 'G _':0  }},{ '援助':60, 'ASL':{ 'AC':真, 'g_ac':真, '统计':0, 'LDB':0, 'G _':0}} 
   code>  pre> 
 
 

我希望它像这样返回 p>

  [0] =>  { '援助':10, 'ASL':{ 'AC':真, 'g_ac':真, '统计':0, 'LDB':0, 'G _':0}, 'HS': '4.8'  ,'l_p':1229241600} 
 [1] =>  {'aid':80,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g _':0} 
 [2] =>  {'aid':100,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g _':0} 
 [3] =>  {'aid':30,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g _':0} 
 [4] =>  {'aid':40,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g _':0} 
 [5] =>  { '援助':60, 'ASL':{ 'AC':真, 'g_ac':真, '统计':0, 'LDB':0, 'G _':0} 
 代码>   pre> 
  div>

To not include } { in the split-sequence, could use lookarounds instead:

(?<=}),(?={) or (?<=});(?={)

Test at regex101.com


For use with the regex-functions need to put that into delimiters: /pattern/

You can use Regex Look behind and look ahead:

<?php

$string = "{'aid':10,'aSL'{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0},'hs':'4.8','l_p':1229241600},{'aid':80,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}},{'aid':100,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}},{'aid':30,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}},{'aid':40,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}},{'aid':60,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}}";

$matches = preg_split('/(?<=}),(?={)/', $string);

var_dump($matches);

Returns:

array(6) {
  [0]=>
  string(92) "{'aid':10,'aSL'{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0},'hs':'4.8','l_p':1229241600}"
  [1]=>
  string(59) "{'aid':80,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}}"
  [2]=>
  string(60) "{'aid':100,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}}"
  [3]=>
  string(65) "{'aid':30,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}}"
  [4]=>
  string(59) "{'aid':40,'aSL':{'ac':0,'g_ac':0,'stats':0,'ldb':0,'g_':0}}"
  [5]=>
  string(65) "{'aid':60,'aSL':{'ac':true,'g_ac':true,'stats':0,'ldb':0,'g_':0}}"
}