Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在多个分隔符上拆分字符串并保留一些分隔符?_Php_Regex_String_Split_Explode - Fatal编程技术网

Php 如何在多个分隔符上拆分字符串并保留一些分隔符?

Php 如何在多个分隔符上拆分字符串并保留一些分隔符?,php,regex,string,split,explode,Php,Regex,String,Split,Explode,我正在寻找一种基于一些分隔符将字符串拆分为几个单词的方法 例如,字符串word1和word2!word3 word4和word5应该给我一个包含以下单词的数组: word1 &word2 !word3 word4 &word5 如何做到这一点? 我用stru_replace尝试了几种解决方案,但我无法找到获得所需的最佳方法。 也许解决办法是使用正则表达式,但我不知道如何使用它们 试试这个: $src='word1&word2 !word3 word4 &word

我正在寻找一种基于一些分隔符将字符串拆分为几个单词的方法

例如,字符串word1和word2!word3 word4和word5应该给我一个包含以下单词的数组:

word1
&word2
!word3
word4
&word5
如何做到这一点? 我用stru_replace尝试了几种解决方案,但我无法找到获得所需的最佳方法。 也许解决办法是使用正则表达式,但我不知道如何使用它们

试试这个:

$src='word1&word2 !word3 word4 &word5';
$arr=explode(' ',$src=preg_replace('/(?<=[\w])([&!])/',' $1',$src));
echo join('<br>',$arr); // present the result ...
首先将由类[&!]的单个字符组成的组的任何出现处(前面有“word”-字符)更改为“$1”=本身,前面有空格,然后使用空格作为分隔符分解字符串

如果您需要处理多个空格作为单词之间的分隔符,您当然可以替换更快的爆炸“”,。。。通过稍微细化的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
)

你应该看看如何使用explode,这里很明显我已经看到了那个页面,但没有任何东西可以帮助我。我错了吗?@keikuku92 explode只有在字符串中有一个像逗号一样的一致分隔符时才起作用。这里有多种可能性。您需要决定使用一个分隔符进行分解或使用一个规则。在您的示例中,这是在每个数字字符之后,这是您的意思吗?您可以使用preg_split,如在回答中所示。它是有效的,但如果遇到包含单词1的字符串,如何编辑它!字2。在本例中,它不会拆分。只是编辑了我的回复:使用一个由属于字符类[&!]的单个字符组成的组,而不是单个字符,并将其替换为它自己的出现值$1。我之所以这样问,是因为我试图解析用户搜索字符串。也许你可以帮我做这个: