Vim 搜索替换正则表达式如果是这个,不是那个,不是那个
Vim Search Replace Regexp If this, not that, and not that
我有一个页面,我正在尝试使用正则表达式修复指向该页面的大量链接。
例如。有些东西已经被替换了,它们像 href="/websites/site.."
一样在那里,所以那些我一个人留下。然而,有些被从绝对替换为相对,但我得到的脚本认为我正在更改的文件位于 Web 根目录中,它们是..所以当我得到像 href="/file"
这样的匹配时,我想匹配。任何人。这是我正在使用的正则表达式
%s#\v(href\="/)&((href\="/websites)@!|(href\="//)@!)#href="/websites/site/#g
但是,它会像这样更改一组条目
<a href="/websites/site/websites/site/dog.html">
<a href="/websites/site//">
<a href="doghouse.html">
<a href="/websites/site/doghouse.html">
至此
<a href="/websites/site/href="/websites/site/websites/site/dog.html">
<a href="/websites/site/href="/websites/site//">
<a href="doghouse.html">
<a href="/websites/site/href="/websites/site/doghouse.html">
如能帮助我们正确使用 search/replace vim 正则表达式,我们将不胜感激。
谢谢
你可以用 :help :global
来完成。根据您的解释,我不完全确定您要做什么,但您可以使用此命令排除带有“网站”的行,如下所示::g!'href="/websites/site/'s/LESS_COMPLICATED_REGEX/RESULT/
这里我使用 :g!
在所有与 ''
中的正则表达式不匹配的行上执行命令(您可以像往常一样使用 /
而不是 '
).要执行的命令是常用的 :s
但在这里您不必担心它会 运行 在具有“网站”字符串的行上。
好的,开始吧!
:%s/\vhref\="\/(\/|websites)@!/href="\/websites\/site
说明:
您要更改的所有字符串都以 href="/
开头,因此将其作为文字包含似乎是正确的调用。
然后,您要确保文字“websites”和“/”都不存在,以便与 (\/|website)@!
一起使用,然后,您想要用新添加的内容更改它,所以剩下的是必需的。
我有一个页面,我正在尝试使用正则表达式修复指向该页面的大量链接。
例如。有些东西已经被替换了,它们像 href="/websites/site.."
一样在那里,所以那些我一个人留下。然而,有些被从绝对替换为相对,但我得到的脚本认为我正在更改的文件位于 Web 根目录中,它们是..所以当我得到像 href="/file"
这样的匹配时,我想匹配。任何人。这是我正在使用的正则表达式
%s#\v(href\="/)&((href\="/websites)@!|(href\="//)@!)#href="/websites/site/#g
但是,它会像这样更改一组条目
<a href="/websites/site/websites/site/dog.html">
<a href="/websites/site//">
<a href="doghouse.html">
<a href="/websites/site/doghouse.html">
至此
<a href="/websites/site/href="/websites/site/websites/site/dog.html">
<a href="/websites/site/href="/websites/site//">
<a href="doghouse.html">
<a href="/websites/site/href="/websites/site/doghouse.html">
如能帮助我们正确使用 search/replace vim 正则表达式,我们将不胜感激。
谢谢
你可以用 :help :global
来完成。根据您的解释,我不完全确定您要做什么,但您可以使用此命令排除带有“网站”的行,如下所示::g!'href="/websites/site/'s/LESS_COMPLICATED_REGEX/RESULT/
这里我使用 :g!
在所有与 ''
中的正则表达式不匹配的行上执行命令(您可以像往常一样使用 /
而不是 '
).要执行的命令是常用的 :s
但在这里您不必担心它会 运行 在具有“网站”字符串的行上。
好的,开始吧!
:%s/\vhref\="\/(\/|websites)@!/href="\/websites\/site
说明:
您要更改的所有字符串都以 href="/
开头,因此将其作为文字包含似乎是正确的调用。
然后,您要确保文字“websites”和“/”都不存在,以便与 (\/|website)@!
一起使用,然后,您想要用新添加的内容更改它,所以剩下的是必需的。