Помогите написать preg_replace

Cyrill

Новичок
Помогите написать preg_replace

Помогите составить regexp, который бы заменял в тексте все вхождения типа href="link", href=link, href='link' на href="another_link"


Заранее всем спасибо.
 

tf

крылья рулят
помоч поможем, но сначало тебя хотим услышать
твое мнение?
 

xintrea

Новичок
Навскидку

$s=preg_replace("/href=((\"link\")|(link)|('link'))/","href=\"another_link\"",$s);

Должно делать то о чем ты просил.
 

phprus

Moderator
Команда форума
Cyrill
Это можно сделать при помощи функции [m]str_replace[/m]. Зачем тут регулярные выражения не совсем понятно.

xintrea
В регулярке не обязательно указывать 3 раза link. можно написать примерно так: "/href=['\"]?link['\"]?/"
 

xintrea

Новичок
> В регулярке не обязательно указывать 3 раза link. можно написать примерно так: "/href=['\"]?link['\"]?/"

Тогда найдутся неправильные строки типа

href="link'

или

href='link"


Кстате, для отладки RegExp в онлайне можно пользоваца вот этой страничкой

http://www.regular-expressions.info/javascriptexample.html
 

phprus

Moderator
Команда форума
xintrea
Действительно. О возможности существования таких неправильных строк я не подумал.

Однако автору темы скорее всего надо проводить замену в html-коде, а там редко встречаются разные кавычки в обрамлении одного атрибута (я такого никогда не видел и не уверен, что браузеры это нормально воспримут).
 

Cyrill

Новичок
Ребят, всем спасибо. Сделал с помощью strpos + offset, str_replace. Работать должно намного быстрее (чисто логически)и меньше головной боли, хотя код объемнее
 

phprus

Moderator
Команда форума
Cyrill
А strpos то тут зачем? Все решается одним вызовом str_replace, в качестве 1-го параметра передается массив из строк которые надо заменить, а в качестве 2-го строка на которую надо заменить.
 

Cyrill

Новичок
phprus
Пробывал. Только проблема в том, что если у меня нужно заменить ссылку типа href="/" на href="index.html" и в массиве хранится /, то понимаешь что получится ???
Я strpos нахожу href, потом анализирую тип кавычек или его отсутствие и выдираю подстроку, которую заменяю по массиву
 

MadGreen

meninweb
Cyrill а что получится?

-~{}~ 04.01.07 22:45:

phprus а если в тексте будет указана таже страница что и в href? str_replace заменит и ее (что он наверное и имел ввиду про слеш)
ИМХО здесь без регулярки не обойтись
 

phprus

Moderator
Команда форума
Cyrill
А в чем проблема то?
$html = str_replace(array('href="/"'), array('href="index.html"'), $html);

а если в тексте будет указана таже страница что и в href
Это как понять?
 

Cyrill

Новичок
MadGreen

проблема в том, что у тебя будут все вхождения типа <br /> заменены на <br index.html>
 

phprus

Moderator
Команда форума
Cyrill
Это не проблема. Достаточно помимо самой ссылки писать еще и href= в условии поиска. Пример я привел в своем предыдущем сообщении.
 

MadGreen

meninweb
Cyrill у меня не будут - читай предыдущий пост (примерно это я и имел ввиду)
phprus если писать href внутри str_replace проблема будет в том, что нужно будет предусматривать по 2 варианта на каждую запись: href="index.html" и href='index.html', что не удобно

-~{}~ 04.01.07 22:55:

и даже 3 - я не раз видел как пишут в хрефе адрес вообще без кавычек
 

Cyrill

Новичок
phprus
Вы не учли то, что разные кулибины пишут href="link", href=link, href='link'
Не всех еще научили верстать по стандартам
 

MadGreen

meninweb
посему выбор не в сторону str_replace...
а шаблон поиска регеэспа в топике уже написал phprus
 

Cyrill

Новичок
а есть еще такие перлы типа
document.writeln('a href="blablalbabal?var1='+$var_value+'&var2=2....">sdsd</a>');
 
Сверху