【问题标题】:How to remove repeated sequence of characters in a string?如何删除字符串中重复的字符序列?
【发布时间】:2019-06-02 14:07:55
【问题描述】:

想象一下:

$string = "abcdabcdabcdabcdabcdabcdabcdabcd";

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

$new_string = remove_repetitions($string);

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

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

请注意,我希望它也可以与其他字符序列一起使用。我尝试使用正则表达式,但我想不出一种方法来完成它。我还是 php 和 Regex 的新手。

【问题讨论】:

  • 您需要提供更多案例来清除上下文。 bcdaabcdjdfgabcd 的输出应该是什么?
  • 这绝对是可能的,但它是一个多阶段的正则表达式,这意味着您需要制定一些方法来确定字符串何时重复。如果它不重复你什么都不做如果它重复你需要捕获子字符串。获得子字符串后,您可以将整个字符串划分为捕获组并删除除第一个之外的所有字符串。另一个问题是您会将多少个字符视为子字符串。 4 或 20。你认为重复的字符串有多长将决定这将是多么困难。这绝对不是初学者的任务。

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


【解决方案1】:

详情:https://algorithms.tutorialhorizon.com/remove-duplicates-from-the-string/

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

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

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

【讨论】:

    【解决方案2】:

    在这里,如果我们希望删除重复的子字符串,除了知道我们希望收集什么之外,我想不出其他方法,因为模式看起来很复杂。

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

    (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

    【讨论】:

      【解决方案3】:

      您没有具体说明要删除的内容。 “字符序列”可以小到只有 1 个字符。

      所以这个简单的正则表达式应该可以工作

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-07
        • 1970-01-01
        • 2017-04-18
        • 2014-08-02
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        相关资源
        最近更新 更多