我在$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
答案 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);
?>
答案 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));