#php #regex #file #preg-replace #preg-match
#php #регулярное выражение #файл #preg-replace #preg-match
Вопрос:
Я хочу изменить приведенный ниже код, чтобы получить все возможные файлы со всеми возможными расширениями, а не только exe
, zip
, rar
, bin
и т.д.
$find=array('~(<a(.*)href="([^"]*.exe)"(.*)>)([^<]*)(</a>)~',
'~(<a(.*)href="([^"]*.zip)"(.*)>)([^<]*)(</a>)~',
'~(<a(.*)href="([^"]*.rar)"(.*)>)([^<]*)(</a>)~',
'~(<a(.*)href="([^"]*.bin)"(.*)>)([^<]*)(</a>)~');
$matches[$i][1] = preg_replace($find, '<p>$0</p><a href=$3 class="btn btn-success" download>Download</a>',$matches[$i][1]);
Комментарии:
1. нет, я этого не делаю, но я хочу получить все возможные перестановки расширений в одном коде @fronthem
2. Возможно, вам просто нужно было
(<a(.*)href="([^"]*.(?:exe|zip|rar|bin))"(.*)>)([^<]*)(</a>)
начать. Если вы копируете / вставляете один и тот же код несколько раз, вам следует просмотреть его во второй раз. Согласно вашему комментарию ниже, что вы хотите расширение между 2-4 символами, которое вы могли бы сделать(<a(.*)href="([^"]*..{2,4})"(.*)>)([^<]*)(</a>)
; или вы могли бы поменять.
на символьный класс, разрешающий только буквенно-цифровые символы. Возможно, вы захотите посмотреть, какие символы разрешены в качестве расширений для используемой вами ОС.3. теперь я чувствую себя так глупо, спасибо @chris85
Ответ №1:
Теоретически существует почти бесконечное количество файлов и расширений, если вы хотите захватить их все, замените
*.exe
с помощью
*.*
и это должно охватить все
Комментарии:
1. Можете ли вы привести более полный пример в своем вступительном сообщении? Это действительно должно сработать для вас, поскольку * является шаблоном. Мне интересно посмотреть ваш пример, можете ли вы опубликовать его на ideone?
2. я хочу получить расширение файла до 2-4 мест после (.)
3.
.*
что угодно (кроме новых строк).4. это становится
/
слишком, и я этого не хочу. @chris85
Ответ №2:
Я мог бы привести вам несколько простых примеров, которые вы можете применить к своей работе
<a href="(?:./)?(?:[^/"] /)*[^/"]*.([a-zA-Z] )">
Это регулярное выражение попытается захватить расширение файла в <a ...>
теге open.
Объяснение
(?:./)?
сопоставьте префикс ./
пути к файлу, если он существует,
(?:[^/"] /)*
сопоставьте любые возможные пути, которые заканчиваются, /
например this/is/my/path/
,
[^/"]*
сопоставьте имя файла,
.
сопоставьте точку,
([a-zA-Z] )
сопоставьте расширение файла.
Смотрите ДЕМОНСТРАЦИЮ
Комментарии:
1. Не работает должным образом, можете ли вы реализовать код в моем примере?
2. Что вы хотите сделать? сопоставьте или захватите какую часть
<a..>
тега.3. это не так, это единственное, что работает. Вы можете попробовать, ваш не работает
4.
<a href="part i wanna have containg link filename extension ">FileName</a>
5. regex101.com/r/UPyMx3/2 это еще одна версия, поддерживающая несколько атрибутов.