#php #mysql #regex #preg-match
#php #mysql #регулярное выражение #preg-match
Вопрос:
У меня есть таблица MySQL с несколькими столбцами.
Столбец 1 содержит HTML-код:
<p style="xxx"><img src="path/to/file.png(or jpg)"></p>
Я хочу извлечь src
(path/file.xxx) в столбец 2, а затем удалить весь тег P из столбца 1.
Я попробовал несколько методов, таких как
preg_match('/< *[img][^>]*[src] *= *["']{0,1}([^"']*)/i', $row->image, $matches);
Но, похоже, ничего не получается.
Что-нибудь простое и легкое в использовании?
Комментарии:
1. Вы не хотите использовать
[...]
блоки вокругimg
иsrc
.< *img[^>]*src *= *["']?([^"'>] )["'][^>]*>
кажется, все в порядке: regex101.com/r/qC9pD7
Ответ №1:
[]
представляет набор символов, а не последовательность символов.
$html = '<p style="xxx"><img src="path/to/file.png(or jpg)"></p>';
preg_match('/<img src="([^"]*)">/', $html, $m);
echo $m[0] . "n";
echo $m[1] . "n";
выводит:
<img src="path/to/file.png(or jpg)">
path/to/file.png(or jpg)
Ответ №2:
Со всеми оговорками об использовании регулярных выражений для обработки html, вы можете использовать простой preg_replace
:
$replaced = preg_replace('~<p[^>]*><img src="([^"] )"></p>~', '$1', $yourstring);
Объяснение
<p
соответствует началу тега[^>]*
соответствует любым символам, которые не являются>
><img src="
соответствует буквенным символам- Круглые скобки в
([^"] )
захватывают любые символы, которые не"
относятся к группе 1 (это то, что вы хотите) "></p>
сопоставляет символы с группой 1- Мы заменяем всю строку на
$1
, которая является обратной ссылкой на содержимое, захваченное группой 1