因此,我使用 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 个元音)的子字符串3 个元音)。
不可能,但对于辅音,您可以使用字符类交集,这是 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 个元音时可能会出现这种情况)。
关于java - jflex 中的元音正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14639715/