剥离java字符串中的url'

时间:2009-12-29 20:01:42

标签: java regex

我已经尝试了几个小时并且无法正确执行此操作;所以我想我会在这里发布。这是我的问题。

给出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>).*

请注意,链接中的字符串可以是可变长度的,这就是我在表达式中使用。*的原因。

如果有人能给我一个正常的表达方式,我会非常感激。如果没有循环遍历每个角色并删除链接,我找不到解决方案。

3 个答案:

答案 0 :(得分:3)

有时通过两个步骤更容易实现:

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 :(得分:2)

这是我通常匹配标签的方式:

<a .*?>|</a>

并替换为空字符串。

或者,您可以将其注释掉,而不是删除标记。匹配模式将是相同的,但替换将是:

<!--\0-->

<!--$0-->

如果您想要引用锚文本,请使用此匹配模式:

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

并且替换将是1而不是0的索引。

注意:有时您必须使用特定于编程语言的标志来允许正则表达式跨行匹配(多行模式匹配)。这是一个Java示例

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

答案 2 :(得分:1)

脱离我的头顶

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