0

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

例如,我想找到被问到的唯一字符串“ tr6hrvjh

$string = "htr6hrvjhtr6hrvjhtr6hrvjhtr6hrvjh";

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

- 编辑 -

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

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

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

我所做的是我从第一个偏移量 [1] 即 (t) 开始循环 $string 中的每个字符。循环只会结束,如果

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

'unique' 字符串的条件是:

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

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

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

- 编辑 -

到目前为止我遇到的测试字符串就像我给你的那些

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

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

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

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

4

3 回答 3

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

于 2012-05-23T11:55:11.220 回答
0

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

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

于 2012-05-23T10:19:27.750 回答
0

大海捞针示例:

 $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

于 2012-05-23T10:19:47.763 回答