PHP:使用不同的分隔符列表拆分字符串,并保留有关分隔符的信息
这实际上是两个问题的一种组合,我面临着这两个问题,但没有找到解决办法 假设分隔符数组是PHP:使用不同的分隔符列表拆分字符串,并保留有关分隔符的信息,php,string,split,substring,delimiter,Php,String,Split,Substring,Delimiter,这实际上是两个问题的一种组合,我面临着这两个问题,但没有找到解决办法 假设分隔符数组是 $splitby = array('dlmtr1','dlmtr2','dlmtr3',' ','dlmtr5','dlmtr6'); $text = ' dlmtr1This is the string dlmtr2dlmtr2TTTdlmtr5WWWWW '; $textArr = ('This', 'is', 'the', 'string', 'TTT', 'WWWWW'); $del
$splitby = array('dlmtr1','dlmtr2','dlmtr3',' ','dlmtr5','dlmtr6');
$text = ' dlmtr1This is the string dlmtr2dlmtr2TTTdlmtr5WWWWW ';
$textArr = ('This', 'is', 'the', 'string', 'TTT', 'WWWWW');
$delimiterArr = (' dlmtr1', ' ', ' ', ' ', 'dlmtr2dlmtr2', 'dlmtr5',' ');
换言之,这是真的
$text == $delimiterArr[0] . $textArr[0] . $delimiterArr[1] . $textArr[1] . ... . $delimiterArr(count($delimiterArr));
因此,$delimiterArr
的每个项目至少包含一个或多个分隔符,如您所见
模式的可能解决方案步骤如下:
$pattern = '/\s?'.implode($splitby, '\s?|\s?').'\s?/';
然后我会以任何方式得到错误的结果
更新:这是我得到的接近预期结果的结果,但问题是分隔符被拆分,但如果它们在文本中在一起,它们应该在一起**
$splitby = array('dlmtr1','dlmtr2','dlmtr3',' ','dlmtr5','dlmtr6');
$text = ' dlmtr1This is the string dlmtr2dlmtr2TTTdlmtr5WWWWW ';
$pattern = '/\s?'.implode($splitby, '\s?|\s?').'\s?/';
$result = preg_split($pattern, $text, -1, PREG_SPLIT_NO_EMPTY);
preg_match_all($pattern, $text, $matches);
print_r($result);
print_r($matches[0]);
结果:
Array
(
[0] => This
[1] => is
[2] => the
[3] => string
[4] => TTT
[5] => WWWWW
)
Array
(
[0] =>
[1] => dlmtr1 '[0] and [1] should come together
[2] =>
[3] =>
[4] =>
[5] =>
[6] => dlmtr2 '[6] and [7] should come together
[7] => dlmtr2
[8] => dlmtr5
[9] =>
)
谢谢。下面的代码按预期运行
$splitby = array('dlmtr1','dlmtr2','dlmtr3',' ','dlmtr5','dlmtr6');
$text = ' dlmtr1This is the string dlmtr2dlmtr2TTTdlmtr5WWWWW ';
preg_match_all("/\s*(dlmtr[1-6])+\s*|\s+/", $text, $matches);
echo "<pre>";print_r($matches[0]);echo "</pre>";
Array
(
[0] => dlmtr1
[1] =>
[2] =>
[3] =>
[4] => dlmtr2dlmtr2
[5] => dlmtr5
[6] =>
)
$result = explode(' ', trim(preg_replace("/\s*(dlmtr[0-9])+\s*|\s+/",' ', $text)));
echo "<pre>";print_r($result);echo "</pre>";
Array
(
[0] => This
[1] => is
[2] => the
[3] => string
[4] => TTT
[5] => WWWWW
)
$splitby=array('dlmtr1','dlmtr2','dlmtr3','','dlmtr5','dlmtr6');
$text='dlmtr1这是字符串dlmtr2dlmtr2TTTdlmtr5WWWWW';
preg_match_all(“/\s*(dlmtr[1-6])+\s*|\s+/”,$text,$matches);
回声“;打印($matches[0]);回声“;
排列
(
[0]=>dlmtr1
[1] =>
[2] =>
[3] =>
[4] =>dlmtr2dlmtr2
[5] =>dlmtr5
[6] =>
)
$result=explode(“”,trim(preg_replace(“/\s*(dlmtr[0-9])+\s*|\s+/”,“”,$text));
回声“;打印(结果);回声“;
排列
(
[0]=>此
[1] =>是
[2] =>
[3] =>字符串
[4] =>TTT
[5] =>WWWWW
)
Downvoter,请您解释一下您的投票结果好吗?非常感谢。