java - 基于正则表达式用Java添加html标签,保持数据匹配

标签 java html regex parsing

使用 java,我正在编写一个脚本来锚定链接 html 引用书目。那就是 来自:[1,2] 至:<a href="o100701.html#bib1">[1, 2]</a>

我想我找到了正确的正则表达式:\[.*?\]

我遇到的问题是编写代码,该代码将保留表达式内的值,同时用链接标记包围它。

我能想到的就这么多了

while(myScanner.hasNext())
{
 line = myScanner.nextLine();
 myMatcher = myPattern.matcher(line);
 ...
 outputBufferedWritter.write(line+"\n");
}

文件不是很大,而且几乎总是少于 100 个匹配项,所以我不关心性能。

最佳答案

首先,我认为有一个更好的模式来匹配 [tag]内容是[\[\]]*而不是.*? (即除了左括号和右括号之外的任何内容)。

对于替换,如果 URL 因[tag]而异内容,那么你需要一个明确的 Matcher.find()循环与 appendReplacement/Tail 结合.

下面是设置 Map<String,String> 的示例URL 和 Matcher.find()循环替换:

    Map<String,String> hrefs = new HashMap<String,String>();
    hrefs.put("[1,2]", "one-two");
    hrefs.put("[3,4]", "three-four");
    hrefs.put("[5,6]", "five-six");

    String text = "p [1,2] \nq [3,4] \nr [5,6] \ns";

    Matcher m = Pattern.compile("\\[[^\\[\\]]*\\]").matcher(text);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        String section = m.group(0);
        String url = String.format("<a href='%s'>%s</a>",
            hrefs.get(section),
            section
        );
        m.appendReplacement(sb, url);
    }
    m.appendTail(sb);

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

打印:

p <a href='one-two'>[1,2]</a> 
q <a href='three-four'>[3,4]</a> 
r <a href='five-six'>[5,6]</a> 
s

请注意appendReplacement/Tail没有StringBuilder过载,所以StringBuffer必须使用。

引用文献

相关问题

关于java - 基于正则表达式用Java添加html标签,保持数据匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3342133/

相关文章:

regex - 匹配平衡括号的正则表达式

Java 8 Completable Future - 并行执行

java - RabbitMQ Java 客户端自动重新连接

javascript - 如何仅使用 JS 从另一个域加载文件内容?

html - 如果左侧的另一个 div 导致它们堆叠,则垂直对齐右侧的 div

javascript - div 标签不会换行文本

java - 使用正则表达式提取匹配的字符串

java - 如何使用JSTL c :choose to change a form action

java - Amazon Corretto 和 OpenJDK 的区别

regex - 多行 grep 正则表达式不起作用