如何删除字符串中重复的字符序列?

时间:2019-06-02 14:07:55

标签: php regex regex-group regex-greedy backreference

想象一下:

$string = "abcdabcdabcdabcdabcdabcdabcdabcd";

如何删除字符串中重复的字符序列(所有字符,而不仅仅是字母),以便新字符串仅包含“ abcd”?也许运行一个返回删除了重复项的新字符串的函数。

$new_string = remove_repetitions($string);

删除重复项之前可能的字符串始终如上。我不知道该怎么解释,因为英语不是我的母语。其他例子是

$string = “EqhabEqhabEqhabEqhabEqhab”;
$string = “o=98guo=98guo=98gu”;

请注意,我也希望它也可以与其他字符序列一起使用。我尝试使用Regex,但无法找到实现它的方法。我还是php和Regex的新手。

3 个答案:

答案 0 :(得分:0)

有关详细信息:https://algorithms.tutorialhorizon.com/remove-duplicates-from-the-string/

在不同的编程中,从字符串中删除相同或重复字符的方式不同。 示例:在PHP

<?php
$str = "Hello World!";
echo count_chars($str,3);
?> 

OutPut:!HWdelor https://www.w3schools.com/php/func_string_count_chars.asp

答案 1 :(得分:0)

在这里,如果我们希望删除重复的子字符串,那么除了了解我们希望收集的内容之外,我别无选择,因为这些模式看起来很复杂。

在这种情况下,我们可以简单地使用捕获组并在其中添加所需的输出,然后删除其他所有内容:

(abcd|Eqhab|guo=98)

我想这应该是更简单的方法。

测试

$re = '/.+?(abcd|Eqhab|guo=98)\1.+/m';
$str = 'abcdabcdabcdabcdabcdabcdabcdabcd
EqhabEqhabEqhabEqhabEqhab
o98guo=98guo=98guo=98guo=98guo=98guo=98guo98';
$subst = '$1';

$result = preg_replace($re, $subst, $str);

echo $result;

Demo

答案 2 :(得分:0)

您没有告知要删除的内容。 “字符序列”可以小到1个字符。

所以这个简单的正则表达式应该起作用

preg_replace ( '/(.)(?=.*?\1)/g','' 'abcdabcdabcdabcdabcdabcd');