我试图用正则表达式替换java中的这个字符串,这个,因为它是一个jtextArea,它可以包含很多次这个组合,
input
%fila%
Val1,val2,val3
%/fila%
output
<tr>
<th>val1</th>
<th>val2</th>
<th>val3</th>
</tr>
我尝试了几次没有运气
谢谢你的帮助。
仅使用一个正则表达式很难做到这一点,但两个表达式会做得更好:
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%
s 相互嵌套,则上述方法将失败。但是,如果您必须允许无限嵌套相同的标签,则正则表达式将无法做到:在这种情况下,您需要计算嵌套级别,但正则表达式语言的功能不足以进行计数。