如何在多个分隔符上拆分字符串并保留一些分隔符?
How to split string on multiple delimiters keeping some delimiters?
我正在寻找一种基于某些分隔符将字符串拆分为多个单词的方法。
例如字符串 word1&word2 !word3 word4 &word5
应该给我一个包含以下单词的数组:
word1
&word2
!word3
word4
&word5
如何达到?
我用 str_replace() 尝试了几种解决方案,但我无法找出获得所需内容的最佳方法。
也许解决方案可以使用正则表达式,但我不知道如何使用它们。
试试这个:
$src='word1&word2 !word3 word4 &word5';
$arr=explode(' ',$src=preg_replace('/(?<=[\w])([&!])/',' ',$src));
echo join('<br>',$arr); // present the result ...
首先将前面有 'word' 字符的 class [&!]
单个字符组成的组更改为 ' '
(=本身,前面有一个空格),然后 explode()
使用空格作为分隔符的字符串。
如果您需要处理多个空格作为单词之间的分隔符,您当然可以将(更快的)explode(' ',...)
替换为稍微多一点的 "refined" preg_split('/ +/',...)
.
您可以使用 preg_split
,并根据需要进行一些自定义。请参见下面的示例:-
function customExplode($string){
if($matches = preg_split('/[\s&!]+/i', $string, null, PREG_SPLIT_OFFSET_CAPTURE)){
$return = array();
foreach ($matches as $match) {
$return[] = (($match[1]-1) >= 0) ? substr($string, $match[1]-1, 1).$match[0] : $match[0];
}
return $return;
} else {
return $string;
}
}
$word = 'word1&word2 !word3 word4 &word5';
print_r(customExplode($word));
结果
Array
(
[0] => word1
[1] => &word2
[2] => !word3
[3] => word4
[4] => &word5
)
以前的答案使这项任务过于复杂。
所需的 coding/pattern 逻辑是在每个 space 或 &
或 !
.
之前的位置进行拆分
代码 #1:(Demo) - 在 space 或 non-space 和 &
或 !
之间拆分
var_export(
preg_split('/ |(?<! )(?=[&!])/', $string)
);
代码 #2:(Demo) - 在 space 或 &
或 !
之前的位置匆忙拆分,并从结果 [=21= 中省略空元素]
var_export(
preg_split('/ |(?=[&!])/', $string, 0, PREG_SPLIT_NO_EMPTY)
);
两个输出:
array (
0 => 'word1',
1 => '&word2',
2 => '!word3',
3 => 'word4',
4 => '&word5',
)
我正在寻找一种基于某些分隔符将字符串拆分为多个单词的方法。
例如字符串 word1&word2 !word3 word4 &word5
应该给我一个包含以下单词的数组:
word1
&word2
!word3
word4
&word5
如何达到? 我用 str_replace() 尝试了几种解决方案,但我无法找出获得所需内容的最佳方法。 也许解决方案可以使用正则表达式,但我不知道如何使用它们。
试试这个:
$src='word1&word2 !word3 word4 &word5';
$arr=explode(' ',$src=preg_replace('/(?<=[\w])([&!])/',' ',$src));
echo join('<br>',$arr); // present the result ...
首先将前面有 'word' 字符的 class [&!]
单个字符组成的组更改为 ' '
(=本身,前面有一个空格),然后 explode()
使用空格作为分隔符的字符串。
如果您需要处理多个空格作为单词之间的分隔符,您当然可以将(更快的)explode(' ',...)
替换为稍微多一点的 "refined" preg_split('/ +/',...)
.
您可以使用 preg_split
,并根据需要进行一些自定义。请参见下面的示例:-
function customExplode($string){
if($matches = preg_split('/[\s&!]+/i', $string, null, PREG_SPLIT_OFFSET_CAPTURE)){
$return = array();
foreach ($matches as $match) {
$return[] = (($match[1]-1) >= 0) ? substr($string, $match[1]-1, 1).$match[0] : $match[0];
}
return $return;
} else {
return $string;
}
}
$word = 'word1&word2 !word3 word4 &word5';
print_r(customExplode($word));
结果
Array
(
[0] => word1
[1] => &word2
[2] => !word3
[3] => word4
[4] => &word5
)
以前的答案使这项任务过于复杂。
所需的 coding/pattern 逻辑是在每个 space 或 &
或 !
.
代码 #1:(Demo) - 在 space 或 non-space 和 &
或 !
var_export(
preg_split('/ |(?<! )(?=[&!])/', $string)
);
代码 #2:(Demo) - 在 space 或 &
或 !
之前的位置匆忙拆分,并从结果 [=21= 中省略空元素]
var_export(
preg_split('/ |(?=[&!])/', $string, 0, PREG_SPLIT_NO_EMPTY)
);
两个输出:
array (
0 => 'word1',
1 => '&word2',
2 => '!word3',
3 => 'word4',
4 => '&word5',
)