2012-09-01 167 views
2

我想为我的java程序编写一个简单的正则表达式来计算音节,但是我对于正则表达式真的很陌生,所以我没有正确写出它,我不确定是什么我做错了。我写的正则表达式是:正则表达式音节不工作

((a|i|o|u|y)?!(a|i|o|u|y|e)|e?!(a|i|o|u|y|e|\\w)|\\w) 

(a|i|o|u|y)?!(a|i|o|u|y|e) 

应该匹配所有没有被另一个元音立即跟随的非元音元音。

e?!(a|i|o|u|y|e|\\w) 

应该匹配所有没有立即跟随元音或非alphebetical字符的e。

\\w 

应该匹配所有不匹配的单词部分是由另外两个部分之一。

相反,我的前两个没有任何匹配,\ w匹配每个字母数字字符,所以很明显,我做了多个错误的事情。

我真的很感谢帮助,对不起,如果这个问题有点基本!

Java方法本身是在这里,但我认为它的正常工作:

public int countNumberOfSyllables(String textToCountSyllablesIn) { 

     int syllableCounter = 0; 

     Pattern regexForSyllables = Pattern.compile(
       "((a|i|o|u|y)?!(a|i|o|u|y|e)|e?!(a|i|o|u|y|e|\\w)|\\w)", 
       Pattern.CASE_INSENSITIVE); 

     Matcher syllableMatcher = regexForSyllables.matcher(textToCountSyllablesIn); 

     while (syllableMatcher.find()) { 
      syllableCounter++; 
     } 

     if (syllableCounter == 0) { 
      syllableCounter++; 
     } 

     return syllableCounter; 
    } 
+2

'\ w'捕获所有的字母,数字和下划线。它不符合单词。 – oldrinb

回答

1

你忘了周围的先行括号:

(?!...) 
+0

那么确定很简单!我使用的测试仪告诉我现在它工作得更好。谢谢! – CorayThan

+0

当然,现在我试图写一个逆序,这似乎正在打破正则表达式。任何想法为什么(?<= 1)e打破了正则表达式测试者? – CorayThan