Регулярное выражение для поиска + замена href = "URL" - PullRequest
5 голосов
/ 05 марта 2011

Я бесполезен с регулярными выражениями и не смог найти себе ясное решение для Google.

Я хочу выполнить поиск + заменить некоторый текст ($ content) для любого URL-адреса внутри ссылки на якорь новым URL-адресом (сохраненным как переменная $ newurl).

Изменить это:

<a href="http://blogurl.com/files/foobar.jpg"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a>

К этому:

<a href="http://newurl.com/here/"><img alt="foobar" src="http://blogurl.com/files/2011/03/foobar_thumb.jpg" /></a>

Я думаю, что использование preg_replace было бы лучше для этого. Что-то вроде:

preg_replace('Look for href="any-url"', 
'href="$newurl"',$content);

Идея состоит в том, чтобы заставить все изображения на главной странице WordPress ссылаться на их сообщения, а не на полноразмерные изображения (как они по умолчанию). Обычно заменяется только один URL-адрес, но я не думаю, что было бы больно заменять все потенциальные совпадения.

Надеюсь, все это имело смысл и заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 06 марта 2011

Вот суть того, что я придумал.Надеюсь, это кому-нибудь поможет:

$content = get_the_content();
$pattern = "/(?<=href=(\"|'))[^\"']+(?=(\"|'))/";
$newurl = get_permalink();
$content = preg_replace($pattern,$newurl,$content);

echo $content;

Большое спасибо @ WiseGuyEh

5 голосов
/ 05 марта 2011

Это должно сработать - вы можете проверить это здесь

(?<=href=("|'))[^"']+(?=("|'))

Он использует lookahead и lookbehind , чтобы утверждать, что все, что соответствует, начинается с href = " или href = ' и следит за тем, чтобы он заканчивался одинарной или двойной кавычкой.

Примечание: регулярное выражение не сможет определить, является ли этодействительный html-документ - если есть сочетание одинарных и двойных кавычек, используемых для включения значения href, эта ошибка будет игнорироваться!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...