如何找到&;使用Notepad++和正则表达式替换url


How do I find & replace a url using Notepad++ and regular expressions?

我已经搜索了一段时间,还没有找到如何做我想做的事情。

我需要搜索一个文件夹并找到包含具有特定基本url的href标记的文件。我已经用以下正则表达式实现了这一点:

(href="(https:'/'/www'.mytesturl'.com))

在找到使用此URL的文件和位置后,我需要对找到的文本进行替换。这就是我的问题所在。href属性肯定会包含文本:

https://www.mytesturl.com

此外,它可能包含任何形式的查询字符串值或之后的"/"路径。

最终,我的查找/替换操作需要产生以下结果:

href='<%= Request.Url.Scheme + "://" + Request.Url.Host + "<extra>" %>'

其中<extra>是从".com"结尾到引号中的初始href值结尾的所有内容。

所以

https://www.mytesturl.com?somevar=somevalue&secondvar=第二值

将是:

href='<%=Request.Url.Scheme+"://"+Request.Url.Host+"?somevar=somevalue&secondvar=secondvalue"%>'

https://www.mytesturl.com/otherpath?somevar=somevalue&secondvar=第二值

将是:

href='<%=Request.Url.Scheme+"://"+Request.Url.Host+"/otherpath?somevar=somevalue&secondvar=secondvalue"%>'

Notepad++能用正则表达式查找/替换这样的内容吗?

您已经遇到了一些问题,这些问题都源于在不应该使用Regex的情况下使用Regex。编写一个PHP小脚本来遍历目录,解析每个HTML文件,导航DOM以查找a标记并检查其href属性。。。然后重写它们(对于可以使用regex!)。

如果你可以接受假阴性(即没有发现一些情况),那么是的,你可以这样做…使用捕获和反向引用。

所以,你可以搜索:

href="https:'/'/www'.mytesturl'.com([^"]*)"
//                                 ^^^^^^^
//                             optional capture
//                         any characters until '"'

并将其替换为:

href='<%= Request.Url.Scheme + "://" + Request.Url.Host + "'1" %>'
//                                                         ^^
//                                                 contents of capture
//                                               (which may be nothing!)

顺便说一句,对于ASP中的字符串连接,您确实应该使用&,而不是+

此外,关于"查找"主题的Notepad++手册(按F1)解释了该应用程序使用Scintilla正则表达式引擎,并链接到Scintilla文档,这是这类工作的一个非常方便的参考务必阅读文档