使用GREP / Regex

时间:2019-01-04 09:32:33

标签: regex grep notepad++ bbedit

我使用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个网址,所以我真的想确定自己没有做错任何事情。

非常感谢您为我提供帮助。

1 个答案:

答案 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)然后匹配可选的html的非捕获组
      • php-双引号
  • "-除[^"<_]*"<以外的0个以上的字符
  • _-匹配重置运算符,该运算符将舍弃到目前为止已匹配的所有文本
  • \K-下划线。