我已经搜索了一段时间,还没有找到如何做我想做的事情。
我需要搜索一个文件夹并找到包含具有特定基本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文档,这是这类工作的一个非常方便的参考务必阅读文档