2012-04-03 52 views
0

您好我一直在嘗試學習使用Java的RegExpresions我仍然在開始,我想開始一個小程序,給出一個字符串並輸出syllabels split.This是我有這麼遠:Java正則表達式無法獲得評估模式的結果

String mama = "mama"; 
    Pattern vcv = Pattern.compile("([aeiou][bcdfghjklmnpqrstvwxyz][aeiou])"); 
    Matcher matcher = vcv.matcher(mama); 
    if(matcher){ 
    // the result of this should be ma - ma 
    } 

我所要做的是創建檢查給定單詞的字母模式,如果它發現一個包含vocale /輔音/ vocale它會加入一個模式「 - 」像這樣的v-cv。我可以如何實現這一點。

回答

2

在下面的實施例I匹配的第一個元音和使用正向前查找下一個輔音 - 元音組。這是如此我可以再分裂,如果我有一個vcvcv組。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Test { 
    public static void main(String[] args) { 
     new Test().run(); 
    } 

    private void run() { 
     String mama = "mama"; 
     Pattern vcv = 
      Pattern.compile("([aeiou])(?=[bcdfghjklmnpqrstvwxyz][aeiou])"); 
     Matcher matcher = vcv.matcher(mama); 

     System.out.println(matcher.replaceAll("$1-")); 
     String mamama = "mamama"; 
     matcher = vcv.matcher(mamama); 
     System.out.println(matcher.replaceAll("$1-")); 
    } 

} 

輸出:

 
ma-ma 
ma-ma-ma 
+0

+1的模式:(模式)=關聯(匹配器) $ 1 – 2012-04-03 12:47:02

0

嘗試

mama.replaceAll('([aeiou])([....][aeiou])', '\1-\2'); 

的replaceAll是正則表達式方法

0

你的模式只如果字符串以一個聲音開始匹配。如果你想找到一個字符串,忽略開始,使用

Pattern vcv = Pattern.compile (".*([aeiou][bcdfghjklmnpqrstvwxyz][aeiou])"); 

如果你喜歡忽略結束太:

Pattern vcv = Pattern.compile (".*([aeiou][bcdfghjklmnpqrstvwxyz][aeiou]).*");