【问题标题】:php get first unique substringphp 获取第一个唯一的子字符串
【发布时间】:2012-05-23 10:16:11
【问题描述】:

如何获得给定字符串中的第一个唯一子字符串。

例如,我想在

中找到被询问“tr6hrvjh”的唯一字符串

$string = "htr6hrvjhtr6hrvjhtr6hrvjhtr6hrvjh";

我尝试了 substr_count 并使用 for(),还尝试了嵌套循环。仍然无法正常工作 你有什么方法可以检索唯一的字符串吗?还是可以使用正则表达式? 我目前正在使用 php。如果你可以用其他编程语言做到这一点,请这样做。

-- 编辑--

好的。 niftydude 所说的唯一字符串 im 指的是重复。对于那个很抱歉。让我改一下问题

$string (h) 中的第一个字符用作正在搜索的唯一字符串的“限制器”。它表示正在搜索的唯一字符串的结尾。

第二个字符 (t) 是唯一字符串的开始。这就是为什么我说“tr6hrvjh”

我所做的是从第一个偏移量 [1] 即 (t) 开始循环 $string 中的每个字符。只有在

  • 您找到了“限制器”字符,即“h”
  • 字符串已经重复,例如,当您在 $string 上遍历时,您已经拥有 'tr6hrvjh'。在又几个循环之后,您再次检测到“tr6hrvjhtr6”。你的循环必须结束。

'unique' 字符串的条件是:

  • 只能是字母数字
  • 必须 >= 5
  • $string 中的所有字符都必须在那个“唯一”字符串中。例如,如果 $string 是 htr6ahrvjhtr6ahrvjhtr6ahrvjh,则唯一的字符串必须是 tr6ahrvjh 而不是 tr6ah,这会将 rvjh 留在 $字符串

注意 $string 总是这样。第一个和第二个字符始终分别作为“唯一”字符串的最后一个和第一个字符。并且唯一的字符串总是在 $string 中重复,重复之间没有其他字符。

另一个问题是正在搜索的字符串中有两个 h。好吧,我希望你能理解。随意评论:D

-- 编辑--

到目前为止我遇到的测试字符串和我给你的一样

htr6hrvjhtr6hrvjhÔi§¯ŸÍ©¥g§¬Ð™×ªhÖØ¡~¦ÓkÕ¬šÕª—©«

htr6hrvjhtr6Ôi§¯ŸÍ©¥g§¬Ð™×ªhÖØ¡~¦ÓkÕ¬šÕª—©«

512354651235465Ôi§¯ŸÍ©¥g§¬Ð™×ªhÖØ¡~¦ÓkÕ¬šÕª—©«

5123546512354651235Ôi§¯ŸÍ©¥g§¬Ð™×ªhÖØ¡~¦ÓkÕ¬šÕª—©«

【问题讨论】:

  • tr6hrvjh 是如何成为唯一子字符串的?我看到他们重复了:o

标签: php string substring unique


【解决方案1】:

可能是我还没有正确理解你的问题,但是试试这个:

function getUniqueString($string) {
  $delimiter = $string[0];
  $chunks = array_filter(explode($delimiter, $string), function ($chunk) {
    return preg_match('/^[0-9a-zA-Z]+$/', $chunk);
  });

  return implode(array_unique($chunks)) . $delimiter;
}

演示:http://codepad.viper-7.com/oYoD40

【讨论】:

  • 你是神。这可能会。尽管该函数无法在我正在测试的当前字符串上工作 - codepad.viper-7.com/jOwfrR
  • @kapitanluffy 新测试用例的预期结果是什么?直到现在我都认为唯一的字符串会形成一个重复的模式(这就是找到它的想法)。
  • 这个 'tr6rvjh' .i 遇到了一个新字符串,它的重复模式比我上面说的要短。虽然很短,但它仍然设法在非 alpha 字符之前的最后 3 个字符(tr6)上重复
  • @kapitanluffy 我明白了,您能否在问题中添加更多测试字符串和预期结果,让事情变得更容易;)
  • 我猜第一个效果更好。 preg_match() 给了我一个想法,先检索字母字符,然后使用旧的 getUniqueString() 。我在哪里可以看到它的旧版本?有点困惑 / 键盘
【解决方案2】:

http://php.net/manual/en/function.strpos.php

使用strpos()。给你的字符串和'needle',它将返回索引中你的needle在字符串中的第一个实例。如果没有找到,它将返回FALSE

【讨论】:

    【解决方案3】:

    大海捞针示例:

     $pos = strpos($haystack,$needle);
    
        if($pos === false) {
         // string needle NOT found in haystack
        }
        else {
         // string needle found in haystack
        }
    

    http://www.maxi-pedia.com/string+contains+substring+PHP

    另外,关于它的 php.net 手册: http://php.net/manual/en/function.strpos.php

    【讨论】:

      猜你喜欢
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 2021-10-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 2011-10-29
      相关资源
      最近更新 更多