如何获取给定字符串中的第一个唯一子字符串。
例如,我想找到被问到的唯一字符串">tr6hrvjh">
$string = "htr6hrvjhtr6hrvjhtr6hrvjhtr6hrvjh";
我尝试了substr_count并使用for((,也尝试了嵌套循环。 仍然无法让它工作您有什么方法可以检索唯一字符串吗?或者可以使用正则表达式吗?我目前正在使用PHP。如果你可以用其他编程语言做到这一点,请这样做。
--编辑--
好的。Niftydude所说的 IM所指的唯一字符串是重复的。 对此感到抱歉。 让我改写一下这个问题
$string (h( 中的第一个字符用作正在搜索的唯一字符串的"限制器"。 它指示正在搜索的唯一字符串的末尾。
第二个字符 (t( 是唯一字符串的开头。 这就是为什么我说"tr6hrvjh">
我所做的是从第一个偏移量 [1] 开始循环$string中的每个字符,即 (t(。 循环仅在以下情况下结束
- 您找到了"限制器"字符,即"h">
- 例如,当您遍历已经有 'tr6hrvjh' 的$string时,字符串已经重复了自己。 又循环了几次后,您再次检测到"tr6hrvjhtr6"。 您的循环必须结束。
"唯一"字符串的条件是:
- 必须仅为字母数字
- 必须为>= 5
- $string中的所有字符都必须位于该"唯一"字符串中。 例如,如果$string是 HTR6ahrvjhtr6ahrvjhtr6ahrvjh,则唯一字符串必须是 tr6ahrvjh 而不是 tr6ah,这会将 rvjh 留在$string
请注意,$string总是这样。 第一个和第二个字符始终分别充当"唯一"字符串的最后一个字符和第一个字符。 并且唯一字符串始终在$string中重复,在重复之间没有其他字符。
另一个问题是被搜索的字符串中有两个 H。 好吧,我希望你能理解它。 随时发表评论:D
--编辑--
到目前为止,我遇到的测试字符串就像我给你的一样
htr6hrvjhtr6hrvjhÔi§ ̄ŸÍ©¥g§¬Ð™×ªhÖØ ̃¦ÓkÕšÕª—©«
htr6hrvjhtr6Ôi§ ̄ŸÍ©¥g§¬ÐתhÖØ ̃¦ÓkÕ¬™ šõª—©«
512354651235465Ôi§ ̄ŸÍ©¥g§¬Ð×™ ªhÖØ ̃¦ÓkÓkÕšÕª—©«
5123546512354651235Ôi§ ̄ŸÍ©¥g§¬Ð™×ªhÖØ ̃¦ÓkÓkŴšÕª—©«
可能是我仍然没有正确理解您的问题,但请尝试以下操作:
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
http://php.net/manual/en/function.strpos.php
使用strpos()
.给你的字符串和"针",它将返回索引你的针在字符串中的第一个实例。如果未找到,它将返回FALSE
。
大海捞针的例子:
$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