繁体   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