2011-11-28 7 views
5

私は複数のフレーズを持つテキストを持っています#{key}たとえば:文字列のすべての#{key}を置き換える方法は?

Lorem ipsum dolor sit amet, consectetur adipisicing #{key1}. Proin nibh 
augue, suscipit a, scelerisque #{key1}, lacinia in, mi. Cras vel #{key2}. 
Etiam pellentesque aliquet tellus. Phasellus pharetra nulla ac diam. 
Quisque semper #{key3} at risus. 

私は(messageSourceorg.springframework.context.MessageSourceある)messageSource.getMessage(key, null, locale)を対応するすべての#{key}の値を交換する必要があるが、私は正規表現が得意ではないんです。正しい正規表現を構築するには?

keyはあなたの正規表現は、このようなものになるだろう、任意の名前のためだけのプレースホルダであると仮定すると、
#{texts.appName} need to replace with messageSource.getMessage("texts.appName", null, locale); 
#{my.company} need to replace with messageSource.getMessage("my.company", null, locale); 
+0

私の答えをチェックしてください! :) – HashimR

+0

APIクラスのStringクラスを見ると、必要なものすべてが表示されます – lancegerday

答えて

3

#\{([\w\.]+)\}

これは意味:単語文字やドットの任意のシーケンスを(\w\.、 (a-zA-Z0-9_\.に相当)が#{}の間でグループ1として返されます。

は今、あなたはマッチャーを作成し、試合を反復処理する、キーを抽出し、あなたのメッセージとの一致を交換する必要があります。

String input = "Lorem ipsum dolor sit amet, consectetur adipisicing #{key1}. " + 
    "Proin nibh augue, suscipit a, scelerisque #{key1}," + 
    "lacinia in, mi. Cras vel #{key2}. Etiam pellentesque aliquet tellus." + 
    " Phasellus pharetra nulla ac diam. Quisque semper #{key3} at risus."; 
StringBuffer result = new StringBuffer(); 

Pattern p = Pattern.compile("#\\{([\\w\\.]+)\\}"); 
Matcher m = p.matcher(input); 

while(m.find()) {  
    //extract the message for key = m.group(1) here 
    //i'll just mark the found keys 
    m.appendReplacement(result, "##" + m.group(1) + "##");  
} 
m.appendTail(result); 

System.out.println(result); //output: ... consectetur adipisicing ##key1## ... etc. 
2

が、これは試してはRegex与える:

#{([^}]+)} 
0

使用yourString.replaceAll("\\#\\{key\\}", messageSource.getMessage(key, null, locale))

最初のバックスラッシュは、javaの文字列解釈から2番目のバックスラッシュをエスケープすることです。 2番目は、正規表現の解釈のために '#'記号(または '{'、 '}記号)をエスケープするためです。

0

ここに行きます。使用例:

Pattern p = Pattern.compile("\\Q#{\\E([^.]+)\\Q}\\E"); 
Matcher m = p.matcher(yourString); 
Pattern tempPattern = Pattern.compile("([#{][^.]+[}])"); 
Matcher tempMatcher = tempPattern.matcher(yourString); 


while(m.find() && tempMatcher.find()) {  

    String textToReplace = messageSource.getMessage(m.group(1), null, locale); 
    yourString = yourString.replace(tempMatcher.group(1), textToReplace); 
} 

System.out.println(yourString); 

関連する問題