使用PHP拆分空格和括号

时间:2012-09-13 11:16:14

标签: php regex

我在$s中有这个字符串:

  

ben说(#yellow)嘿

目前我正在使用:

$parts = array_filter(preg_split('/\s+/', $s));

所以我有一个数组元素的输出:

[0] ben
[1] say
[2] (#yellow)
[3] hey

是否可以创建这样的数组结构:

[0] ben
[1] say
[2] (
[3] #yellow
[4] )
[5] hey

5 个答案:

答案 0 :(得分:3)

您可以按Lookahead and Lookbehind Zero-Width Assertions分割它:

$parts = array_filter(preg_split('/\s+|(?=[()])|(?<=[()])/', $s));

答案 1 :(得分:1)

你可以试试这个替代品:

$s = str_replace(array('(', ')'), array('( ', ' )'), $s);
$parts = array_filter(preg_split('/\s+/', $s));

这里的诀窍是在(和单词之间添加一个空格,以便它被分割。但是,它仅适用于您的示例。 ((之类的内容可能会导致一些不必要的结果。如果是这样,您可以尝试使用preg_replace。

答案 2 :(得分:0)

<?php

// function to explode on multiple delimiters
function multi_explode($pattern, $string, $standardDelimiter = ':')
{
    // replace delimiters with standard delimiter, also removing redundant delimiters
    $string = preg_replace(array($pattern, "/{$standardDelimiter}+/s"), $standardDelimiter, $string);

    // return the results of explode
    return explode($standardDelimiter, $string);
}

// test

    // set up variables
    $string = "zero  one | two :three/ four\ five:: six|| seven eight nine\n ten \televen twelve thirteen fourteen fifteen";
    $pattern = '/[:\|\\\\\/\s]/';  // colon (:), pipe (escaped '\|'), slashes (escaped '\\\\' and '\/'), white space (\s)

    // call function
    $result = multi_explode($pattern, $string);

    // display results
    var_dump($result);

?>

来源:http://php.net/manual/en/function.explode.php示例

答案 3 :(得分:0)

一个可以完全按照需要工作的衬垫(你甚至不需要array_filter):

$s = "ben say (ewfs) as";
$parts = preg_split('/\s+|(\()|(\))/', $s, null, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY)

/*
Array(
  0 => "ben",
  1 => "say",
  2 => "(",
  3 => "ewfs",
  4 => ")",
  5 => "as",
)
*/

答案 4 :(得分:-2)

这将有效:

$parts = array_filter(preg_split('/[\s\(\)]+/', $s));