2

正規表現の問題を解決しようとしています。どうやらPerlの正規表現に似たJava正規表現を使用しています。

1 から 9 までの 1 桁の数字が 3 回以上連続して繰り返される文字列、または繰り返しの間に 1 文字の「w」が含まれる文字列を検索したいと考えています。

たとえば。12333、123w3、12ww3、ww123 はすべて一致するはずですが、12345、1234w、1323w は一致しません。

「[[0-9]w]{3,}」というパターンを試してみましたが、それが間違いである理由がわかりました。私の要件に合った検索パターンを構築するための手がかりを誰かに教えてもらえますか?

4

1 に答える 1

4

それがワイルドカードであることを正しく理解している場合w(あなたが書いたものからはわからないため、あなたが提供する例により詳細がわかりません)、この正規表現は機能するはずです...

([1-9])(\1|w){2,}|w([1-9])(\3|w)+|ww([1-9])\5*

これはおそらく最もエレガントなソリューションではありませんが、機能するはずであり、次のような部分に分割されます...

           # matches that don't start with wildcards
([1-9])    # get a digit, and capture for future reference
(\1|w){2,} # the captured digit, or the letter w, 2 or more times
|          # or, matches that start with a single w
w          # match a w
([1-9])    # get a digit, and capture for future reference
(\3|w)+    # get one or more of the captured digit, or letter w
|          # or, matches starting with two w
ww         # get two w
([1-9])    # get a digit, and capture for future reference
\5*        # get all the successive captured digits

これもうまくいくはずです...

([1-9])(\1|w){2,}|w([0-9](\3|w)|w[0-9])
于 2013-02-17T09:40:01.873 に答える