使用 GREP / Regex 将 url 中的下划线替换为给定的 url 扩展名
Replace underscore with dash in url for given url extensions using GREP / Regex
我使用 BBEdit。 BBEdit 支持多文件搜索和 GREP 替换。使用这个(从 Notepad++ post 复制到 ):
(\bhref="|(?!^)\G)[^"<_]*\K_
我可以获得所有包含下划线的 URL 的列表。这个想法是用破折号替换所有下划线。没问题,BBEdit 搜索面板有一个 'Replace with' 字段(类似于 Notepad++)。
一切都很好,但是我实际上不想处理所有 URL。例如,文件下载 URLs 应保持原样,尤其是带有 .exe、.zip、.sit 和 .dmg 扩展名的 URLs。实际上,我要处理的 URLs 是 .php 和 .html url。
我的意思是这种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,所以我真的很想确保我没有做错任何事。
非常感谢你帮我解决这个问题。
只有当 link 以 .html
/.htm
或 .php
:
结尾时才可以强制匹配
(?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))[^"<_]*\K_
^^^^^^^^^^^^^^^^^^^^^^^^^
(?=[^"]*\.(?:html?|php)")
正前瞻将需要除 "
以外的任何 0+ 个字符,然后是 .
后跟 htm
/html
或 php
紧跟在 href="
之后,否则将找不到匹配项。
详情
(?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))
- 上一场比赛结束 (\G(?!^)
) 或 (|
)
\bhref="
- 整个单词 href
后跟 ="
(?=[^"]*\.(?:html?|php)")
- 正向前瞻,需要以下模式序列立即匹配到当前位置的右侧:
[^"]*
- "
以外的 0+ 个字符
\.
- 一个点
(?:html?|php)
- 匹配 htm
的非捕获组,然后是可选的 l
或 php
"
- 双引号
[^"<_]*
- 除了 "
、<
和 _
之外的任何 0+ 个字符
\K
- 匹配重置运算符,丢弃目前匹配的所有文本
_
- 下划线。
我使用 BBEdit。 BBEdit 支持多文件搜索和 GREP 替换。使用这个(从 Notepad++ post 复制到
(\bhref="|(?!^)\G)[^"<_]*\K_
我可以获得所有包含下划线的 URL 的列表。这个想法是用破折号替换所有下划线。没问题,BBEdit 搜索面板有一个 'Replace with' 字段(类似于 Notepad++)。
一切都很好,但是我实际上不想处理所有 URL。例如,文件下载 URLs 应保持原样,尤其是带有 .exe、.zip、.sit 和 .dmg 扩展名的 URLs。实际上,我要处理的 URLs 是 .php 和 .html url。
我的意思是这种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,所以我真的很想确保我没有做错任何事。
非常感谢你帮我解决这个问题。
只有当 link 以 .html
/.htm
或 .php
:
(?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))[^"<_]*\K_
^^^^^^^^^^^^^^^^^^^^^^^^^
(?=[^"]*\.(?:html?|php)")
正前瞻将需要除 "
以外的任何 0+ 个字符,然后是 .
后跟 htm
/html
或 php
紧跟在 href="
之后,否则将找不到匹配项。
详情
(?:\G(?!^)|\bhref="(?=[^"]*\.(?:html?|php)"))
- 上一场比赛结束 (\G(?!^)
) 或 (|
)\bhref="
- 整个单词href
后跟="
(?=[^"]*\.(?:html?|php)")
- 正向前瞻,需要以下模式序列立即匹配到当前位置的右侧:[^"]*
-"
以外的 0+ 个字符
\.
- 一个点(?:html?|php)
- 匹配htm
的非捕获组,然后是可选的l
或php
"
- 双引号
[^"<_]*
- 除了"
、<
和_
之外的任何 0+ 个字符
\K
- 匹配重置运算符,丢弃目前匹配的所有文本_
- 下划线。