[英]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.matches
和Matcher
循環中使用,因為有效單詞(包含至少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.