регулярное выражение, изображение src может иметь много разных путей, и я хочу заменить их определенным путем

#regex #replace

#регулярное выражение #заменить

Вопрос:

Итак, у меня есть база данных с мультисайта WordPress. Я выполняю поиск и замену в таблице с помощью регулярного выражения, и мне нужно создать все src с определенным именем изображения (image2.jpg ) указать на один каталог. Вот пример. Возможно, у меня:

 src="http://domain.com/path/weird/different/image2.jpg
  

и

 src="http://domain2.com/path2/differentpath/helloworld/image2.jpg
  

Мне нужно заменить все между src=" и /image.jpg with a specific domain/filepath .

Я не силен в регулярных выражениях, я стараюсь, но это просто не моя сильная сторона. Любая помощь приветствуется.

Ответ №1:

Поиск: src="[^"]*image2.jpg

Заменить: src="http://mydomain.com/mypath/image2.jpg

[^"]* Съедает любые символы, которые не являются двойными кавычками.

В демо-версии см. Панель замен внизу.

На PHP (должен работать с WordPress):

 $replaced = preg_replace('/src="[^"]*image2.jpg/', 
                 'src="http://mydomain.com/mypath/image2.jpg',
                 $str);
  

Комментарии:

1. спасибо, я собираюсь попробовать это, я делаю это в запросе mysql из командной строки centos. Недавно я установил систему preg_replace для mysql

2. еще не тестировался, был занят, и этот клиент был довольно, будет тестироваться на этой неделе.

3. К вашему сведению, добавлена демонстрация (см. Замены внизу)

4. @ChrisFlannagan На самом деле, поскольку zx81 также добавил демонстрацию регулярных выражений, почему бы вам не попробовать?

Ответ №2:

Используйте это регулярное выражение:

 /(?<=src=")(.*?)(?=Q/image2.jpgE)/
  

Это соответствует всему, что находится между « src=" » и « /image2.jpg «, поэтому вы можете заменить это своим конкретным domain/filepath .

В зависимости от вашего языка / инструмента вам, возможно, придется избегать ввода / /image2.jpg .

   > Positive Lookbehind - assert that match must be following 'src="'
  |
  |  Anything    > Positive Lookahead - assert that match
  |         |    | is before '/image2.jpg' literally.
/(?<=src=")(.*?)(?=Q/image2.jpgE)/
  

Также попробуйте онлайн-тестер регулярных выражений.