2009-12-29 103 views
1

我已經嘗試了幾個小時,並且無法正確執行此操作;所以我想我會在這裏發佈。這是我的問題。在java字符串中刪除url「

由於在java中的字符串:

"this is <a href='something'>one \nlink</a> some text <a href='fubar'>two \nlink</a> extra text" 

現在我想使用正則表達式來剔除從該字符串的鏈接標籤 - 這樣的結果字符串應該是這樣的:

"this is one \nlink some text two \nlink extra text" 

我我已經嘗試了java正則表達式中的所有東西;捕捉團體,貪婪的限定詞 - 你的名字,並仍然無法讓它工作得很好。如果字符串中只有一個鏈接標記,我可以很容易地實現它。不過,我的字符串可以嵌入多個URL,這是阻止我的表達工作。這是我到目前爲止 - (?s).*(<a.*>(.*)</a>).*

請注意,鏈接內的字符串可以是可變長度,這就是爲什麼我在表達式中。*。

如果有人能給我一個正常的表達,我會非常感激。通過每個字符循環和刪除鏈接我找不到解決方案。

+0

如果你想跟隨的標準,(X)HTML屬性是由雙引號('「'),不是單引號(''')。 – 2009-12-29 20:24:02

回答

3

有時更容易做到這一點在2個步驟:

s = "this is <a href='something'>one \nlink</a> some text <a href='fubar'>two \nlink</a> extra text" 
s.replaceAll("<a[^>]*>", "").replaceAll("</a>", "") 
Result: "this is one \nlink some text two \nlink extra text" 
1

把我的頭

"<a [^>]*>|</a>" 
2

這裏的頂部是我平時匹配標籤的方式:

<a .*?>|</a> 

,並用一個空字符串替換。

或者,您也可以不刪除標籤,而是將其註釋掉。匹配模式是相同的,但更換爲:

<!--\0--> 

<!--$0--> 

如果你想擁有的錨文本的參考,使用這種匹配模式:

<a .*?>(.*?)</a> 

並且替換將是索引1而不是0.

注意:有時您必須使用編程語言特定的標誌來允許正則表達式跨線匹配(多線模式匹配)。這裏有一個Java示例

Pattern aPattern = Pattern.compile(regexString,Pattern.MULTILINE);