0

我有一组字符串,我需要将它们分块成一个数组。字符串需要在/,with或上分割&

不幸的是,一个字符串可能包含两个需要拆分的字符串,所以我不能使用split()or explode()

例如,一个字符串可以说first past/ going beyond & then turn,所以我试图得到一个返回的数组:

array('first past', 'going beyond', 'then turn')

我目前使用的代码是

$splittersArray=array('/', ',', ' with ','&');
foreach($splittersArray as $splitter){
    if(strpos($string, $splitter)){
        $splitString = split($splitter, $string);
        foreach($splitString as $split){

我似乎无法在 PHP 中找到允许我执行此操作的函数。foreach()我是否需要将绳子传回漏斗顶部,并在绳子一次又一次地分裂后继续穿过?

这似乎不是很有效。

4

2 回答 2

8

使用正则表达式和preg_split

在您提到的情况下,您将获得拆分数组:

$splitString = preg_split('/(\/|\,| with |\&/)/', $string);
于 2009-05-21T03:01:09.453 回答
0

为了简洁地编写模式,请为单字符分隔符使用字符类,并将with分隔符作为值添加到管道之后(正则表达式中的“或”字符)。在分隔符组的任一侧允许零个或多个空格,以便不需要修剪输出中的值。

我正在使用PREG_SPLIT_NO_EMPTY函数标志,以防分隔符出现在字符串的开头或结尾,并且您不希望生成任何空元素。

代码:(演示

$string = 'first past/ going beyond & then turn with everyone';

var_export(
    preg_split('~ ?([/,&]|with) ?~', $string, 0, PREG_SPLIT_NO_EMPTY)
);

输出:

array (
  0 => 'first past',
  1 => 'going beyond',
  2 => 'then turn',
  3 => 'everyone',
)
于 2021-03-10T14:57:50.850 回答