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

标签 java regex parsing backreference

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

我希望我可以使用反向引用,但我无法让它工作。 目前我没有使用 HashMap ,我有 2 个 JavaFX TextArea我将通过 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());

仅当返回时,$2 上的反向引用才起作用,但其他反向引用则不起作用。 char.length()始终为 2,因为它被视为 $2而不是作为反向引用。

我想考虑一个可以保留这种风格并且不需要单独处理的解决方案。

最佳答案

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

由于没有接受 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>

关于java - 将 Java 反向引用传递给方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43269070/

相关文章:

java - 如何画一个简单的图表?

java - 在 Java 中更改方法范围之外的变量

java - 如何在Java中创建临时文件时删除ip和其他数值

python - 如何匹配不是(双下划线和双破折号和空格)的字符串

c# - 如何使用 MSpec 有效地测试固定长度的平面文件解析器?

java - 处理异常的方法包装?

java - 在这种情况下,我的 Switch 语句应该以 break 或 return x 退出吗?

java - mongodb java $in 使用 $regex 查询

parsing - 解析带有转义单引号的字符串

c++ - 解析长和双