Заменить подчеркивание тире в URL для заданных расширений URL с помощью GREP / Regex
Я использую BBEdit. BBEdit поддерживает поиск по нескольким файлам и заменяет его на GREP. Используя это (скопировано из записи Notepad++ здесь в stackru):
(\bhref="|(?!^)\G)[^"<_]*\K_
Я могу получить список всех URL-адресов, содержащих подчеркивание. Идея состоит в том, чтобы заменить все подчеркивания тире. Никаких проблем с этим, панель поиска BBEdit имеет поле "Заменить" (как Notepad++).
Все хорошо, НО я не хочу обрабатывать все URL на самом деле. Например, существуют 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, описанный выше, и, поскольку мне нужно обработать около 30000 URL-адресов в 600 файлах, я действительно хотел бы убедиться, что я не сделал ничего плохого.
Заранее большое спасибо за помощь в этом.
1 ответ
Вы можете форсировать матч только тогда, когда ссылка заканчивается .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
- оператор сброса соответствия, который отбрасывает весь найденный текст_
подчеркивание