正则表达式查找并替换通配符链接

时间:2018-03-10 03:45:43

标签: regex

我使用正则表达式陷入困境,但也许有人可以帮助我。

我的页面中有一个标签,我需要更改标签内的URL,即。

自:

<link href="/*.html" rel="canonical"/>

要:

<link href="https:/www.domain.com/*.html" rel="canonical"/>

星号(*)=这是对我所有html文件的全局搜索,子目录可能会有所不同。

我试图使用的正则表达式为:href=”/([^"<]*)”

一无所获。很沮丧。

1 个答案:

答案 0 :(得分:0)

示例文件:

<link href="/*.html" rel="canonical"/>
<link href="/foobar.html" rel="canonical"/>
<link href="/bar/foobar.html" rel="canonical"/>
<link href="/bar/baz/foobar.tar.gz.html" rel="canonical"/>

命令:

sed -r 's/<link href="\/([^<]+).html" rel=/<link href="https:\/www.domain.com\/\1.html" rel=/' canon.html 

结果:

<link href="https:/www.domain.com/*.html" rel="canonical"/>
<link href="https:/www.domain.com/foobar.html" rel="canonical"/>
<link href="https:/www.domain.com/bar/foobar.html" rel="canonical"/>
<link href="https:/www.domain.com/bar/baz/foobar.tar.gz.html" rel="canonical"/>

指挥解构:

  • sed -r 's
  • sed调用,-r使make()在没有屏蔽的情况下工作,s:= substitute命令
  • /<link href="\/([^<]+).html" rel=/
  • 模式之间/匹配,其中大部分字面上除了
  • ([^<]+)阻止贪婪进入下一个标记
  • <link href="https:\/www.domain.com\/\1.html" rel=/
  • 除了
  • 之外,主要是字面替换
  • \1
  • 匹配的第一个(也是唯一一个)模式组
  • canon.html
  • 示例文件名

哪些角色需要屏蔽?好吧,对于sed,你需要屏蔽斜杠,因为它们用于分割

command/pattern/replacement/parameters(optional)

最有可能你的正则表达式不需要它们。例如,在Java中它将是

(file as String).replaceAll (pattern, replacement);

或类似的东西。正如评论中指出的那样,\ 1将是1美元。但在那里,你需要掩盖双引号。

在编辑器搜索/替换框中,您通常使用不同的文本字段来分隔元素和减少遮罩。这里不适用的参数由复选框解决(大写/小写忽略等)。