我使用BBEdit。 BBEdit支持多文件搜索并替换为GREP。使用此方法(从stackoverflow处的Notepad ++帖子中复制):
(\bhref="|(?!^)\G)[^"<_]*\K_
我可以获得包含下划线的所有URL的列表。这个想法是用破折号代替所有下划线。没问题,BBEdit搜索面板上有一个“替换为”字段(例如Notepad ++)。
一切正常,但但我不想实际处理所有URL。例如,应保留原样的文件下载URL,尤其是带有.exe,.zip,.sit和.dmg扩展名的URL。实际上,我要处理的URL是.php和.html URL。
我的意思是应该在此处找到这种类型的网址:
<a href="software/internet-tools/ftp-disk_sheet_us.php">
但不是这个:
<a href="software/internet-tools/ftp-disk_us_setup.exe">
到目前为止,我一直未能成功编辑REGEX,由于我必须处理600个文件中的30,000个网址,所以我真的想确定自己没有做错任何事情。
非常感谢您为我提供帮助。
答案 0 :(得分:2)
仅当链接以.html
/ .htm
或.php
结尾时,您才可以强制匹配:
(?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))[^"<_]*\K_
^^^^^^^^^^^^^^^^^^^^^^^^^
请参见regex demo
(?=[^"]*\.(?:html?|php)")
正向提前查询将需要除"
以外的任何0+字符,然后是.
,后跟htm
/ html
或{{1} },紧接php
之后,否则将找不到匹配项。
详细信息
href="
-上一场比赛((?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))
)或(\G(?!^)
)的结尾
|
-整个单词\bhref="
后跟href
="
-正向超前,需要以下模式序列才能立即匹配当前位置的右侧:
(?=[^"]*\.(?:html?|php)")
-除[^"]*
以外的0多个字符"
-一个点\.
-与(?:html?|php)
然后匹配可选的htm
或l
的非捕获组php
-双引号"
-除[^"<_]*
,"
和<
以外的0个以上的字符_
-匹配重置运算符,该运算符将舍弃到目前为止已匹配的所有文本\K
-下划线。