使用 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/