【问题标题】:Split text using multiple delimiters into an array of trimmed values使用多个分隔符将文本拆分为修剪值数组
【发布时间】:2010-10-27 19:59:08
【问题描述】:

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

不幸的是,一个字符串可能包含两个需要拆分的字符串,所以我不能使用split()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()

这似乎效率不高。

【问题讨论】:

  • “不幸的是,一个字符串可能包含两个需要拆分的字符串,所以我不能使用拆分或分解。”你能解释一下你的意思吗?
  • 我只是添加了一个例子来说明

标签: php arrays string preg-split csv


【解决方案1】:

使用正则表达式和preg_split

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

$splitString = preg_split('/(\/|\,| with |\&/)/', $string);

【讨论】:

    【解决方案2】:

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

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

    代码:(Demo)

    $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',
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多