2013-04-04 78 views
1

我试图用正则表达式来代替这个字符串在Java中,这之间的所有逗号,因为是可以包含很多次这个组合一个JTextArea,正则表达式替换标签

input 
%fila% 
Val1,val2,val3 
%/fila% 

output 
<tr> 
<th>val1</th> 
<th>val2</th> 
<th>val3</th> 
</tr> 

我多试几次没有运气

感谢您的帮助。

+3

输入和输出是完全不同的。 – 2013-04-04 15:21:51

+1

模式允许嵌套吗? – dasblinkenlight 2013-04-04 15:29:36

+0

Achintya Jha->我需要更改标记%fila%%/ fila%为和这并不困难,问题是值wrap,val1 val2和val3与,dasblinkenlight->是可能的 – Crashman 2013-04-04 15:40:55

回答

1

这将是很难只用一个正则表达式来做到这一点,但两个表达式会做的更好:

String test = "%fila%\nVal1,val2,val3\n%/fila%"; 

Pattern bracket = Pattern.compile("%([^%]+)%([^%]*)%/\\1%", Pattern.MULTILINE); 
Matcher m = bracket.matcher(test); 
if (m.find()) { 
    String middle = m.group(2); 
    String tagged = "<tr>"+ 
     middle 
     .replaceAll("[^,\n]+", "<th>$0</th>") 
     .replaceAll(",","\n") 
    +"</tr>"; 
    System.out.println(tagged); 
} 

第一个表达式查找标记的区域;第二个(在replaceAll之内)查找单个元素,并使用<th></th>标签将它们“帧”化。

不幸的是,这根本不涉及嵌套:如果将多个%fila%嵌套在一起,上述方法将失败。但是,如果您必须允许无限制地嵌套相同的标记,则正则表达式将无法执行此操作:在这种情况下,您需要计算嵌套级别,但是正则表达式语言不够强大,无法进行计数。

这是demo on ideone

+0

先生,您是我的英雄,我长大后想成为你,谢谢 – Crashman 2013-04-04 15:49:54