1

我试图用正则表达式替换java中的这个字符串,这个,因为它是一个jtextArea,它可以包含很多次这个组合,

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

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

我尝试了几次没有运气

谢谢你的帮助。

4

1 回答 1

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%s 相互嵌套,则上述方法将失败。但是,如果您必须允许无限嵌套相同的标签,则正则表达式将无法做到:在这种情况下,您需要计算嵌套级别,但正则表达式语言的功能不足以进行计数。

这是关于 ideone 的演示

于 2013-04-04T15:42:23.040 回答