2010-07-26 102 views
1

如果我有下面的字符串,如何用java解壓縮編輯器前面的文本?謝謝。用java解壓縮文本

<div class='chapter'><a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'>EDITORS PREFACE</a></div> 
+1

你想從href屬性或錨標記之間提取?此外,您有一個語法錯誤 - href標記沒有用匹配的單引號關閉。 – 2010-07-26 18:28:38

+0

之間的href標籤 – usertest 2010-07-26 18:30:43

+0

你是否想要一個通用的解決方案,將應付不同的格式(即與HTML漂亮的印刷和縮進),或只是這個樣本字符串?如果你能解釋(通過編輯問題)你想要完成什麼,以及你已經嘗試過了什麼,這將會有所幫助。 – 2010-07-26 18:32:34

回答

0

正如你在你的問題的評論中寫道,你想要的是HREF內,這裏使用正則表達式是:

<a[^>]*? href=\"(?<url>[^\"]+)\"[^>]*?> 

此正則表達式將與微軟.NET框架的工作。它會捕獲href中的內容,並將其放入一個名爲url的組中。

只是指出,這個問題是用Java標記的。在Java中沒有組命名爲JDK 6的,所以這裏的Java的解決方案:

<a[^>]*? href="([^"]+)"[^>]*?> 

上述正則表達式將捕獲的href中的內容將其放入組在這裏1

測試:http://www.regexplanet.com/simple/index.html

運行此程序:

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class RegexMatches 
{ 
    public static void main(String args[]){ 

     // String to be scanned to find the pattern. 
     String line = "<a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'>EDITORS PREFACE</a>"; 
     String pattern = "<a[^>]*? href=\'([^\']+)\'[^>]*?>"; 

     // Create a Pattern object 
     Pattern r = Pattern.compile(pattern); 

     // Now create matcher object. 
     Matcher m = r.matcher(line); 

     if (m.find()) 
     { 
     // Found value: <a href='page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE'> 
     System.out.println("Found value: " + m.group(0)); 

     // Found value: page.php?page=1&filename=SomeFile&chapter=EDITORS PREFACE 
     System.out.println("Found value: " + m.group(1)); 
     } 
     else 
     { 
     System.out.println("NO MATCH"); 
     } 
    } 
} 
+0

一般來說,使用正則表達式來解析XML/HTML是一個壞主意*,因爲正則表達式將嚴重依賴於輸入的確切結構。這是不能保證的,所以對輸入的輕微改變,比如重新排序屬性,將會破壞正則表達式。唯一可行的方法是使用HTML或XML解析器庫。 – 2010-07-26 21:21:26

+0

嗨Leniel謝謝你的幫助,但我似乎無法在java中實現它。我在這個頁面上使用了第一個示例 - http://www.tutorialspoint.com/java/java_regular_expressions.htm - 我用您的示例替換了模式變量,並將其與示例一致。它出現不匹配。 – usertest 2010-07-26 22:39:47

+0

我剛剛發現了原因:您的行示例使用單引號(')。我通過的正則表達式期望雙引號(「)。我用一個我使用Eclipse運行的程序更新了答案,它現在工作正常。 – 2010-07-27 12:48:03