Регулярное выражение для извлечения данных из столбца и помещения их в другой столбец

#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