特定の文字列の最初の一意の部分文字列を取得するにはどうすればよいですか。
たとえば、「tr6hrvjh」で尋ねられている一意の文字列を見つけたい
$string = "htr6hrvjhtr6hrvjhtr6hrvjhtr6hrvjh";
私はsubstr_countを試し、 for()を使用して、ネストされたループも試しました。まだ機能しません。一意の文字列を取得する方法はありますか? または正規表現を使用することは可能ですか? 私は現在phpを使用しています。他のプログラミング言語でできるなら、そうしてください。
- 編集 -
わかった。niftydude が私が参照している一意の文字列が言ったことだけが繰り返されます。ごめんなさい。質問を言い換えさせてください
$string (h) の最初の文字は、検索される一意の文字列の「リミッター」として使用されます。検索されている一意の文字列の末尾を示します。
2 番目の文字 (t) は、一意の文字列の始まりです。だから私は「tr6hrvjh」と言ったのです
私がやったことは、(t) である最初のオフセット [1] から始まる $string の文字ごとにループすることです。ループは次の場合にのみ終了します
- 「h」である「リミッター」文字が見つかりました
- たとえば、すでに「tr6hrvjh」を持っている $string をトラバースしているときに、文字列はすでに繰り返されています。さらに数回ループした後、「tr6hrvjhtr6」をもう一度検出しました。ループを終了する必要があります。
「一意の」文字列の条件は次のとおりです。
- 英数字のみである必要があります
- >= 5 でなければなりません
- $string のすべての文字は、その「一意の」文字列に含まれている必要があります。たとえば、$string がhtr6ahrvjhtr6ahrvjhtr6ahrvjhの場合、一意の文字列は tr6ah ではなく tr6ahrvjh である必要があり、 $ stringにrvjhが残ります
$string は常にそのように見えることに注意してください。最初と 2 番目の文字は常に、それぞれ「一意の」文字列の最後と最初の文字として機能します。一意の文字列は常に $string で繰り返され、繰り返しの間に他の文字はありません。
もう 1 つの問題は、検索対象の文字列に 2 つの 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>