3

正規表現を使用して、文字列内で1文字を超える繰り返しサブ文字列の3つ以上のオカレンスを一致させることは可能ですか?

例えば:

文字列には3回以上ABCD ABC AB ACD DEの部分文字列があります。AB

文字Dも3回出現しますが、1文字しかないため、一致しません。

これは正規表現の限界を超えていると思いますが、そこに天才がいる場合は、同じように質問します。

私がやろうとしているのは、繰り返される文字シーケンスを1文字に置き換えることで暗号化されたクエリ文字列のサイズを縮小することですが、文字列には、縮小されたものを示すために「凡例」を追加(または追加)する必要があります。

例えば:

文字列ABCD ABC AB ACD DEはのようなものに変更され.CD .C . ACD DE、それがわかるように何かを追加する必要があります。現在はABを表します。

何かのようなもの.AB-

ここで-、ターミネータとして機能します。したがって、3未満を置き換えると、実際には文字列全体のサイズが大きくなります。

私はClassicASPを使用していますが、C#ソリューションには非常に満足しています。次に、それをdllに貼り付けて、そのように使用できます。

4

1 に答える 1

4

There are many restrictions here due to regex's greediness and consumption of characters as it goes along the string. Namely, you will only be able to match the one result that most satiates the regex's greediness

(..+).*\1.*\1

The above captures at least two characters and will match if that same substring exists twice later on. This works for

ABCD ABC AB ACD DE
ABCD ABCD AB ABCD DE

However in the latter case only "ABCD" gets matched; AB does not.

Unless this is good enough for you, I would recommend using a solution other than regex such as splitting the words by spaces and inspecting each. It will probably end up being more efficient than the regex too.

于 2013-02-11T14:51:22.470 に答える