2

Google で数時間検索して、部分的な解決策を得ました。

Groovy と正規表現の両方が初めてです。私は何年にもわたって散発的に正規表現を使用してきましたが、私はそれに慣れていません。

隠された単語と共通する文字の数をチェックする簡単なゲームがあります。

簡単にするために、単語が「パン」で、人が「缶」と入力したとします。

正規表現の結果で「an」が得られるようにします。

現在、これを(Groovyで)行うことで部分的に機能しています:

// Where "guess" is the user's try and "word" is the word they need to guess.
def expr = "[$word]"
def result = guess.find(expr)

結果の文字列には、最初に一致した文字のみが含まれます。もっとエレガントなソリューションはありますか?前もって感謝します

4

3 に答える 3

3

これは正規表現のユースケースではないと思います。ユーザーが入力した場合などに自動的に推測させないようにするなどのことに注意する必要があります.*

典型的な収集作業は、IMO のこのタスクにより適しています。解決策の 1 つは、両方の単語を文字セットとして扱い、これらの単語の共通点を見つけることです。

(word as Set).intersect(guess as Set).join()

または、秘密の単語に表示される推測の文字をフィルタリングします。

guess.findAll { word.contains(it) }.unique().join()
于 2013-01-02T15:53:18.867 に答える
1

2 つの文字列が s1 と s2 であると仮定して、共通の文字列を見つけます。

commonString=s1.replaceAll("[^"+s2+"]","");

単語にメタ文字が含まれている場合は、最初に次のことを行います。

Pattern.quote(s2);

その後

commonString=s1.replaceAll("[^"+s2+"]","");
于 2013-01-02T15:22:36.330 に答える
0

あなたは試すことができます:

guess.findAll( /[$word]/ ).join()
于 2013-01-02T15:27:16.333 に答える