【发布时间】:2012-03-14 15:58:36
【问题描述】:
我知道s/&/\&/g 替换所有转义的 & 符号并用 & 符号替换它们。我想更加挑剔。如果它们在href中,我只想替换那些转义的&符号。我想不通。
我尝试了以下方法,但没有成功:
echo "<a href="http://example.com?q=man&string=1&bat=2">Link</a>" | sed -E 's/^href="(.*)&/\1&/g'
没有用。我还看到另一个问题是它只会做第一个转义的&符号而不是全部。有谁知道解决方案可能是什么?
【问题讨论】:
-
您是否可以通过 HTML 解析器访问一种语言?顺便说一句,HTML 属性内的 URL 中的 & 号应该表示为
&amp;,否则您将面临有趣和意外行为的风险。 -
@muistooshort - 不需要解析器...只是对这种情况感兴趣...我认为网址应该是 &但是这个网站只有在它没有转义并且有很多链接的情况下才有效,所以定位它会很好。
-
HTML 中的 URL 格式与发送到远程服务器的 URL 不同。浏览器应该在发送 URL 之前应用 HTML 解码。也许您想提取
href属性,然后对提取的属性进行 HTML 解码,而不是就地替换它们。 -
是否有可能某些 href 已经包含转义的 '&' 元素(例如 <)?在这种情况下,您不应该再次逃避它们,这将使使用正则表达式解决问题变得非常困难
-
您可能不需要结构化解析器,但这并不意味着您不应该使用它。您无法使用正则表达式解析 [X]HTML。因为正则表达式无法解析 HTML。 stackoverflow.com/questions/1732348/…
标签: regex unix command-line sed