删除以分号分隔的字符串中的重复单词

时间:2015-05-30 20:04:22

标签: php regex

我有一个这种格式的长字符串:

hello; world; this; is; a; string; hello; of; some; words;

它的分号+空格分隔。我需要删除字符串中的所有重复单词。结果字符串应如下所示(删除第二个hello;):

hello; world; this; is; a; string; of; some; words;

我该怎么做?

6 个答案:

答案 0 :(得分:2)

以下是PHP中的一个示例:

$string = "hello; world; this; is; a; string; hello; of; some; words;";
$string = implode("; ", array_unique(explode("; ", $string)));

string将包含新字符串:“hello; world; this; is; a; string; of; some; words;”。如果你想要一个像这样的字符串:“hello world这是一些单词的字符串”从implode参数中删除"; "

编辑:根据vihan1086的要求,我已在下面发布了原始代码:

$string = "hello; world; this; is; a; string; hello; of; some; words;";
$matches = array_unique(explode("; ", $string))
$string = implode("; ", $matches);

答案 1 :(得分:0)

我会使用拆分&#34 ;; " (半冒号和空格)然后迭代删除重复的单词数组。最后迭代阵列打印我们的&#34 ;; "在两个词之间。

如果您指定所使用的语言,我可以提供示例代码。希望这有帮助

答案 2 :(得分:0)

/(\w+\b)(?!.*\1\b)/g

上面会提供接近你想要的行为,但是它会省略第一个hello而不是第二个hello,所以你的结果字符串最终会变成world; this; is; a; string; hello; of; some; words;

上述正则表达式使用捕获组是没有价值的,因此实际结果不会作为实际字符串返回,除非您将其恢复为该字符串格式。

答案 3 :(得分:0)

一衬垫

RegEx不适合执行此任务。您可以使用explode array_uniqueimplode

$yourString  = implode('; ', array_unique(explode('; ', $yourString)));

替代

如果你知道你可能有一个没有;的字符串,你可以使用:

$yourString = (!empty(explode('; ', $yourString))) ? (implode('; ', array_unique(explode('; ', $yourString)))) : $yourString;

测试

我用一些示例输入运行了这个,这就是我得到的:

  

hello; hello - > hello

     

hello; hello; hi - > hello; hi

     

hello - > hello

     

hello - > hello;

     

hello; world; this; is; a; string; hello; of; some; words; - > hello; world; this; is; a; string; of; some; words;

快速解释

explode会拆分字符串的;array_unique将删除重复项。 implode会将它融合在一起

答案 4 :(得分:0)

你可以这样做,而不是使用正则表达式:

$string = implode("; ", array_unique(explode("; ", $string)));

答案 5 :(得分:0)

正如安德鲁所提议的那样,拆分清单可能是最简单的解决方案。

<?php
$strWords = "hello; world; this; is; a; string; hello; of; some; words;"

// Split the words up:
$allWords = explode('; ', $strWords);

// Array to store all unique words:
$uniqueWords = array();

foreach($allWords as $word){
    if(!in_array($word, $uniqueWords, true)){
        // This is a unique word
        array_push($uniqueWords, $word);
    }
} /* end for-loop */

// Dump the array of unique words:
var_dump($uniqueWords);
?>