我已经尝试了几个小时并且无法正确执行此操作;所以我想我会在这里发布。这是我的问题。
给出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 :(得分: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>"