隨着
<a href=\"[^\"]+\">[^<]+</a>
這是不可能的,因爲[^\"]+
將匹配任何charachter這不是一個"
你可以試試下面的正則表達式
<a href=\".*(foo\\.com|bar\\.org).*\">[^<]+</a>
有了這個樣本文字
static String input = "my text\r\n" +
"Foo foo foo\r\n" +
"<a href=\"foo.com\">Foo site</a>\r\n" +
"Bar bar bar\r\n" +
"<a href=\"bar.org\">Bar site</a>\r\n" +
"bla bla bla\r\n" +
"\r\n" +
"";
這裏是一個小測試:
@Test
public void replaceLinks() {
String regex = "<a href=\".*(foo\\.com|bar\\.org).*\">[^<]+</a>";
String output = input.replaceAll(regex, "<a href=\"myweb.com\">my web</a>");
System.out.println(output);
}
輸出是:
my text
Foo foo foo
<a href="myweb.com">my web</a>
Bar bar bar
<a href="myweb.com">my web</a>
bla bla bla
然而,由於您的輸入似乎是一個HTML fragement的正確方法是用HTML解析它解析器,如JSoup,並獲取所有鏈接,然後將模式應用於href
屬性。如果匹配,則通過將新鏈接設置到元素中進行替換。
完成後寫入片段bak。
@Test
public void replaceLinksJSoup() {
Document doc = Jsoup.parse(input);
Elements links = doc.getElementsByTag("a");
Pattern pattern = Pattern.compile(".*(foo\\.com|bar\\.org).*");
for (Element link : links) {
String linkHref = link.attr("href");
if (pattern.matcher(linkHref).matches()) {
link.attr("href", "myweb.com");
link.text("my web");
}
}
System.out.println(doc.body().html());
}
輸出:
my text Foo foo foo
<a href="myweb.com">my web</a> Bar bar bar
<a href="myweb.com">my web</a> bla bla bla
來源
2013-10-14 11:33:54
A4L
你的正則表達式是不知道什麼應該由'myweb.com'更換所以你必須將它添加到它。 – A4L
給我們一個正確的輸入文字在你的問題 – SSP
應該有一些東西在你不想要替換的URL中是常見的 – SSP