Java 分组相邻正则表达式匹配
我正在尝试构建一个正则表达式,该正则表达式在以下条件下查找单词中的音节数:Java 分组相邻正则表达式匹配,java,regex,Java,Regex,我正在尝试构建一个正则表达式,该正则表达式在以下条件下查找单词中的音节数: 元音被算作音节 两个或两个以上的连续元音被算作一个音节 如果“e”是单词中的最后一个字母,则忽略它(不要将其视为音节) 元音是:“a”、“e”、“i”、“o”、“u”和“y” 我提出了[e][aeiou]*(?=[a-z])|[aiouy][aiouy]*(?=[a-z]),您可以对其进行测试。正如在测试中看到的,单词“他们”作为两个单独的匹配出现(e和y分别计算),这是一个问题。如何解决这个问题 另外,如果可能的话
- 元音被算作音节
- 两个或两个以上的连续元音被算作一个音节
- 如果“e”是单词中的最后一个字母,则忽略它(不要将其视为音节)
- 元音是:“a”、“e”、“i”、“o”、“u”和“y”
[e][aeiou]*(?=[a-z])|[aiouy][aiouy]*(?=[a-z])
,您可以对其进行测试。正如在测试中看到的,单词“他们”作为两个单独的匹配出现(e和y分别计算),这是一个问题。如何解决这个问题
另外,如果可能的话,如果对regex解决方案有一个解释就太好了。是我的结论,但我相信它可以得到很大的改进
[aeiouyAEIOUY]+(?!(?<=[eE])[^a-zA-Z]|$)
否定前瞻(我们在[aeiouyeiouy]+之后不想要的东西):
嵌套的前瞻性(在否定的前瞻性之后我们想要做的):
它工作得很好,感谢您的详细解释和解决方案!
[aeiouyAEIOUY]+
(?!
(?<=[eE])
[^a-zA-Z]|$)