Да, регулярные выражения довольно мощные.Вот как я могу сделать замену:
$reg = "#<a [^>]*href=['\"]([^\"']+\.mp3)['\"][^>]*>(.*?)</a>#";
$content = preg_replace($reg, "[audio mp3='$1' class='asset-audio' title='$2']", $content);
Где $content
- это любая переменная, которая содержит содержимое сообщения.Я объясню, что делает регулярное выражение:
"#" - первый и последний символы являются разделителями.На самом деле они не являются частью матча
" ] " - [] означает, что он ищет какую-либо группу символов.^ Является отрицателем, что означает «НЕ».«» означает 0 или более из этих символов.В целом это означает, что «ищите 0 или более символов из любого символа accept»>, что удерживает нас внутри тега «a».
«href =» - просто чтобы найти этот текст
"['\ "]" - Открывающая кавычка
"([^ \"'] +. Mp3) "- Скобка позволяет нам получить доступ к этой строке позже (в части замены). Часть в скобках означаетмы ожидаем, что любой символ примет закрывающую кавычку (поскольку ни одна из кавычек обычно не отображается в ссылке, мы в большинстве случаев делаем это безопасно). «+» означает, что он ищет 1 или более из этих символов.символ буквального периода и mp3 (поэтому мы сопоставляем только mp3 ссылки!)
"['\"] "- заключительная кавычка
" [^>] *> "- любое числоиз не ->> символов, за которыми следует>
"(. *?)" - снова скобки для захвата этой строки."."означает любой символ, * означает 0 или более, а "?"означает не быть агрессивным ... чтобы соответствовать как можно меньшему количеству символов (иначе это будет продолжаться до закрывающего тега последней ссылки в сообщении
"