0

そこで、jflexを使用して演習を行いました。これは、3つを超える母音を含む入力テキストファイルから単語の量を数えることです。最終的には、単語のトークンを定義し、このテキストを入力として受け取るJava関数を作成して、各文字をチェックしました。母音の場合はカウンターを合計し、3より大きいかどうかを確認します。そうである場合は、単語数のカウンターを合計します。

私が知りたいのは、3つ以上の母音を持つ単語に一致する可能性のある正規表現があるかどうかです。よりクリーンな解決策になると思います。前もって感謝します。

トークン

   Letra = [a-zA-Z]
   Palabra = {Letra}+
4

3 に答える 3

1

とてもシンプルです。単語に少なくとも3つの母音が含まれていることを確認する場合は、これを使用します。

(?i)(?:[a-z]*[aeiou]){3}[a-z]*

少なくとも3つの母音が含まれているだけなので、残りは任意のアルファベット文字にすることができます。上記の正規表現は、有効な単語(少なくとも3つの母音を含む)を無効な単語(3つ未満の母音を含む)のサブストリングにすることはできないため、String.matchesとループの両方で機能します。Matcher


質問はありませんが、子音の場合は、Java正規表現に固有の機能である文字クラスの交差を使用できます[a-z&&[^aeiou]]。したがって、正確に3つの母音をチェックする場合(の場合String.matches):

(?i)(?:[a-z&&[^aeiou]]*[aeiou]){3}[a-z&&[^aeiou]]*

これをMatcherループで使用している場合:

(?i)(?<![a-z])(?:[a-z&&[^aeiou]]*[aeiou]){3}[a-z&&[^aeiou]]*(?![a-z])

一致した文字列(正確に3つの母音)が無効な文字列(3つ以上の母音がある場合)の一部ではないことを確認するために、ルックアラウンドを使用する必要があることに注意してください。

于 2013-02-01T06:43:42.383 に答える
0

あなた自身がJavaメソッドを書いたので、これは同じように次のように行うことができます。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class VowelChecker {
    private static final Pattern vowelRegex = Pattern.compile("[aeiouAEIOU]");

    public static void main(String[] args) {
        System.out.println(checkVowelCount("aeiou", 3));
        System.out.println(checkVowelCount("AEIWW", 3));
        System.out.println(checkVowelCount("HeLlO", 3));
    }

    private static boolean checkVowelCount(String str, int threshold) {
        Matcher matcher = vowelRegex.matcher(str);
        int count = 0;
        while (matcher.find()) {
            if (++count > threshold) {
                return true;
            }
        }
        return false;
    }

}

ここでthresholdは、探している母音の数を定義します(3より大きい母音を探しているため、mainメソッドでは3になります)。出力は次のとおりです。

true
false
false

お役に立てれば!

ありがとう、
EG

于 2013-02-01T05:18:33.267 に答える
0

私が思いついたこの正規表現を使用することになりました。誰かがより良いものを持っているなら、気軽に投稿してください

     Cons = [bcdBCDfghFGHjklmnJKLMNpqrstPQRSTvwxyzVWXYZ]
      Vocal = [aeiouAEIOU]
       Match = {Cons}*{Vocal}{Cons}*{Vocal}{Cons}*{Vocal}{Cons}*{Vocal}({Cons}*{Vocal}*|{Vocal}*{Cons}*) | {Vocal}{Cons}*{Vocal}{Cons}*{Vocal}{Cons}*{Vocal}({Cons}*{Vocal}*|{Vocal}*{Cons}*)
于 2013-02-01T06:33:40.400 に答える