java - jflex 中的元音正则表达式

标签 java regex 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 个元音)的子字符串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/

相关文章:

antlr - 与 Flex/Bison 相比,使用 ANTLR 有哪些缺点?

java - Java问题中的优先级队列排序

ruby-on-rails - ROR 正则表达式。我正在尝试验证字符串中的第一个和第四个字符是否是 0 或 1 以外的任何数字

python - 抓取匹配词前后的词

java - JFlex 正则表达式与词法规则中的关键字

regex - 如何在 JFlex 中使用正则表达式捕获组?

java - JAXB 不使用 XmlRootElement 进行注释

java - AWS API Gateway 自定义授权方 lambda

java - 什么时候创建一个新变量来存储一个值而不是多次调用函数?

html - 使用正则表达式和 javascript 在 html 中突出显示单词 - 差不多了