我有多个#{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.
Run Code Online (Sandbox Code Playgroud)
我需要#{key}用相应的messageSource.getMessage(key, null, locale)(messageSource是org.springframework.context.MessageSource)替换所有值,但我不擅长正则表达式.如何构建正确的正则表达式?
示例:
#{texts.appName} need to replace with messageSource.getMessage("texts.appName", null, locale);
#{my.company} need to replace with messageSource.getMessage("my.company", null, locale);
Run Code Online (Sandbox Code Playgroud)
假设key只是任何名称的占位符,您的正则表达式将如下所示:#\{([\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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1298 次 |
| 最近记录: |