【问题标题】:Regex to replace = after href attribute in a tags in java正则表达式替换=在java标签中的href属性之后
【发布时间】:2012-10-13 14:04:21
【问题描述】:

我做了一个正则表达式来替换“a”标签中“href”之后的“=”:

output.replaceAll("(<a.*)href=(.*>)", "$1href" + replacemantstring+ "$2");

问题在于它只替换了最后一次出现的“=”在href ...

我做错了什么?

【问题讨论】:

  • 您能否提供具有预期输出的示例输入?
  • 您需要提供输入和预期输出。无法理解你到底想要什么。您发布的正则表达式不会替换任何内容。
  • 太多人在没有阅读问题和标签的情况下回答...超过 4 个的 3 个答案是 javascript 答案...

标签: java html regex


【解决方案1】:

您需要将通配符从 greedy .* 更改为 non-greedy .*?。这将使您的正则表达式在第一个 href= 匹配处停止,因此也匹配以下出现。

【讨论】:

  • @Ωmega:对于这样一个含糊不清的问题,您一定会找到打破它的输入。显然我的回答解决了 OPs 问题,因为他接受了它,所以我真的不明白试图找到极端案例的意义。
  • @Keppil 为了完整性、正确性、可用性和意识。
  • @DaveNewton:前两个标准需要一个更具体和明确的问题。至于正确性,我相信我提供了它。至于意识,我认为它不适用于这里。对于这样一个模糊的问题,您可以提供几乎无限量的附加信息,我宁愿只对具体问题给出一个简短的回答。
  • 你问,我答。我看不出对这个特定弱点的认识如何“不适用”,但也许你对人们应该思考的问题没有我那么严格。我宁愿人们意识到问题而不是忽视它们——YMMV。对于如此简单的问题/解决方案,无法想象为什么只解决潜在问题会更好。
【解决方案2】:

如果您想将href 参数中的链接替换为newURL,请使用

output.replaceAll("(?i)(<a[^>]*?\\shref\\s*=)(['"]).*?\\2", "$1$2" + newURL + "$2"); 

编辑:如果您只想在 href 后面替换 = &lt;a&gt; 标记,然后使用

output.replaceAll("(?i)(<a[^>]*?\\shref\\s*)=", "$1" + replacement); 

【讨论】:

  • 与解决方案相比,这是否更有效:() ?
  • 是的,当我为&lt;a href="abc!" style="dfg!"&gt;asd&lt;/a&gt; 执行output = output.replaceAll("(&lt;a.*?)href=(.*?&gt;)", "$1href"+ "#" +"$2"); 之类的操作时,输出就是我想要的:&lt;a href#"abc!" style="dfg!"&gt;asd&lt;/a&gt;
  • 这是我问题的第一句话:“我做了一个正则表达式来替换“a”标签中“href”之后的所有“=”。抱歉,如果不清楚,感谢您的工作:)
  • @NickRussler - 奇怪且不具建设性的任务,因此&lt;a&gt; 标签在替换后将无效。我上面的答案是链接替换。祝你好运。
猜你喜欢
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-30
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多