Используя Java, я пишу, что сценарий к привязке связывает библиографию HTML. Это идет от: [1,2]
кому: <a href="o100701.html#bib1">[1, 2]</a>
Я думаю, что нашел право regex выражением: \[.*?\]
То, из-за чего я испытываю затруднения, пишет код, который сохранит значения в выражении при окружении их тегами link.
Это - большая часть из, меня могу думать
while(myScanner.hasNext())
{
line = myScanner.nextLine();
myMatcher = myPattern.matcher(line);
...
outputBufferedWritter.write(line+"\n");
}
Файлы не являются очень большими и там почти всегда меньше затем 100 соответствий, таким образом, я не забочусь о производительности.
Прежде всего, я думаю, что лучшим шаблоном для соответствия содержимому [tag]
будет [\[\]]*
вместо .*?
(т.е. все, кроме открывающих и закрывающих скобок).
Для замены, если URL меняется в зависимости от [tag]
содержимого, то вам нужен явный Matcher.find()
цикл в сочетании с appendReplacement/Tail
.
Вот пример, который устанавливает Map
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
.