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

Pass Java backreference to method parameter

我需要这个 https://gist.github.com/jbroadway/2836900 的 Java 端口,它基本上是 PHP.

中的一个简单的降价正则表达式解析器

我希望我可以使用反向引用,但我做不到。 目前我没有使用 HashMap,我有 2 个 JavaFX TextAreas,我将通过 ChangeListener 获取和设置文本。

{ //...
htmlTextArea.setText(markdownTextArea.getText()
    .replaceAll("(#+)(.*)", header("[=11=]", "", ""));
}

private String header(String text, String char, String content) {
    return String.format("<h%s></h%s>", char.length(), char.length());

$2 的反向引用仅在返回时有效,但其他反向引用则无效。 char.length() 始终为 2,因为它被视为 而不是反向引用。

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

问题在于反向引用值仅在替换字符串中有效。因此,传递给 header() 方法的值是 [=13=]</code> 和 <code> 文字,而不是捕获的值。

因为没有接受 lambda 表达式的 replaceAll() 版本,我认为你最好的选择是使用 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>