最新更新:這似乎是匹配器的問題,而不是表達式本身。我測試了一下,並在輸入字符串上使用Pattern/Matcher導致了這個問題。具有元字符的輸入字符串會導致匹配器跳過匹配。如果我只是使用一個簡單的.replaceAll具有相同的表達式,它會發現它很好。我試圖對輸入字符串使用Pattern.quote,但沒有改變任何東西。所以我仍然堅持。爲什麼匹配器在輸入字符串中存在元字符時找不到匹配項?有沒有辦法讓輸入字符串忽略關於匹配器的元字符?正則表達式。 (點)不會在字符串中捕捉括號?
我想對大字符串做一個正則表達式來從標籤的開始到結束標籤提取所有html鏈接。我想出了這個表達式:
<a.*?</a>
這樣做的確不錯。它幾乎獲得了所有這些。我的問題是,如果在字符串內有括號:
<a href="blahblah">myproblem()</a>
匹配器完全跳過此鏈接。我認爲。*?會從第一個a後面的空格中選取所有內容,但如果有任何括號,則不會顯示。
我在這裏錯過了什麼?
編輯澄清:
我正在使用java。在添加到我的項目之前,我正在做這些測試。當我運行它時會失敗,但是如果我將()放在測試中,它就會通過。隨着()我敢肯定它甚至沒有被添加到列表:
String tryConvert = doclet.htmlToWiki("<a href=\"#test.method\">test()</a>");
assertThat(tryConvert, is("[test()|test#method]"));
而且htmlToWiki代碼:
ArrayList<String> links = new ArrayList<String>();
Pattern linkPattern = Pattern.compile("<a.*?</a>", Pattern.DOTALL);
Matcher matcher = linkPattern.matcher(html);
while (matcher.find())
{
links.add(matcher.group());
}
for (String link : links)
{
String original = link;
String alias = link.replaceAll("<a.*?>", "");
alias = alias.replaceAll("</a>", "");
link = link.replaceAll("\">.*?</a>", "]");
link = link.replaceAll("<a.*#", "[");
link = link.replaceAll("\\.", "#");
link = link.replace("[", "[" + alias + "|");
html = html.replaceAll(original, link);
}
什麼是'?'應該做的是什麼呢?噢,這個表達式還會提取標籤名稱以「a」開頭的元素,例如'','',''等等。另外,[this](http://stackoverflow.com/a/1732454/1016716)。 –
我是新來的正則表達式?被解釋爲我之前表達的0或1,我只是把它放在那裏,因爲我看到了。*?作爲一種「全部抓住」。我真的沒有想過那些其他標籤,所以謝謝,但現在我只是想明白爲什麼()會搞砸了。 – Pewsplosions