簡體   English   中英

jflex中的元音正則表達式

[英]Vowel regexp in jflex

因此,我使用jflex進行了一次練習,該練習用於計算來自包含3個以上元音的輸入文本文件中的單詞數量。 我最終要做的是為單詞定義一個標記,然后創建一個接收該文本作為輸入的java函數,並檢查每個字符。 如果它是元音,則將計數器加起來,然后檢查其是否大於3,如果是元音,則將單詞數量的計數器加起來。

我想知道的是,如果有一個正則表達式可以匹配一個帶有3個以上元音的單詞。 我認為這將是一個更清潔的解決方案。 提前致謝。

代幣

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

很簡單。 如果要檢查一個單詞至少包含3個元音,請使用此選項。

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

您只需要關心至少包含3個元音的字母即可,其余的可以是任何字母字符。 上面的正則表達式可以在String.matchesMatcher循環中使用,因為有效單詞(包含至少3個元音)不能是無效單詞(包含少於3個元音)的子字符串。


毫無疑問,但為了輔音,您可以使用字符類交集,這是Java regex [az&&[^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個以上的元音時可能)。

由於您自己編寫了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

希望這可以幫助!

謝謝,
例如

我最終使用了這個正則表達式。 如果有人有更好的隨意發表

     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}*)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM