将Java反向引用传递给方法参数

时间:2017-04-07 03:20:57

标签: java regex parsing backreference

我需要一个这个https://gist.github.com/jbroadway/2836900的Java端口,它基本上是PHP中的一个简单的降价正则表达式解析器。

我希望我可以使用反向引用,但我无法使其工作。 目前我没有使用TextArea,我已经获得了2个JavaFX ChangeListener,我将通过{ //... htmlTextArea.setText(markdownTextArea.getText() .replaceAll("(#+)(.*)", header("$0", "$1", "$2")); } private String header(String text, String char, String content) { return String.format("<h%s>$2</h%s>", char.length(), char.length()); 设置文本。

char.length()

$ 2的反向引用只有在返回时才有效,但其他反向引用则不然。 $2始终为2,因为它被视为<div data-ng-include="'/app/UI/home.html'"></div> 而不是反向引用。

我想想一个解决方案,我可以保持这种风格,而不需要单独处理。

1 个答案:

答案 0 :(得分:2)

问题是反向引用值仅在替换字符串中得到尊重。因此,传递给header()方法的值是$0$1$2文字,而不是捕获的值。

由于replaceAll()没有接受lambda表达式的版本,我认为最好的办法是使用Matcher对象:

String text = "###Heading 3";
Pattern p = Pattern.compile("(#+)(.*)");
Matcher m = p.matcher(text);
StringBuffer out = new StringBuffer();

while(m.find()) {
    int level = m.group(1).length();
    String title = m.group(2);

    m.appendReplacement(out, String.format("<h%s>%s</h%s>", level, title, level));
}

m.appendTail(out);

System.out.println(out.toString());

对于给定的输入,打印出:

<h3>Heading 3</h3>