【问题标题】:Replace underscore with dash in url for given url extensions using GREP / Regex使用 GREP / Regex 为给定的 url 扩展在 url 中用破折号替换下划线
【发布时间】:2019-01-04 09:32:33
【问题描述】:

我使用 BBEdit。 BBEdit 支持多文件搜索和 GREP 替换。使用这个(从 stackoverflow 的 Notepad++ 帖子复制):

(\bhref="|(?!^)\G)[^"<_]*\K_

我可以获得包含下划线的所有 URL 的列表。这个想法是用破折号替换所有下划线。没问题,BBEdit 搜索面板有一个“替换为”字段(如 Notepad++)。

一切都很好,但是我实际上不想处理所有 URL。例如,文件下载 URL 应保持原样,尤其是扩展名为 .exe、.zip、.sit 和 .dmg 的 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 个 url,我真的很想确保我没有做错任何事情。

非常感谢您提前帮我解决这个问题。

【问题讨论】:

  • edit您的帖子并向我们显示您想要处理/匹配的网址以及您想要保持相同的文本。

标签: regex grep notepad++ bbedit


【解决方案1】:

您只能在链接以.html/.htm.php 结尾时强制匹配:

(?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))[^"<_]*\K_
                   ^^^^^^^^^^^^^^^^^^^^^^^^^

regex demo

(?=[^"]*\.(?:html?|php)") 正向前瞻将需要除 " 之外的任何 0+ 字符,然后是 . 后跟 htm/htmlphp,紧跟在 href=" 之后,否则将不匹配找到了。

详情

  • (?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)")) - 上一场比赛结束 (\G(?!^)) 或 (|)
    • \bhref=" - 一个完整的单词href 后跟="
    • (?=[^"]*\.(?:html?|php)") - 正向前瞻,需要以下模式序列才能立即匹配到当前位置的右侧:
      • [^"]* - 除了" 之外的 0+ 个字符
      • \. - 一个点
      • (?:html?|php) - 匹配htm 的非捕获组,然后是可选的lphp
      • " - 双引号
  • [^"&lt;_]* - 除"&lt;_ 之外的任何 0+ 个字符
  • \K - 匹配重置运算符,丢弃目前匹配的所有文本
  • _ - 一个下划线。

【讨论】:

  • 我可以确认这个表达式完美无缺。我在 600 个文件中处理了大约 28,000 次。
猜你喜欢
  • 2013-03-22
  • 2011-12-24
  • 2012-12-26
  • 2010-11-19
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2014-10-15
  • 2012-12-21
相关资源
最近更新 更多