Помогите с регулярным выражением

Ямерт

The Old One
Помогите с регулярным выражением

Такая задача: есть текст с тэгами, возможно, содержащийся в параграфе (<p>). Надо этот тэг параграфа убрать.
Т.е. текст вида "<p>{tagged_text}" или "<p>{tagged_text}</p>", или "{tagged_text}</p>"(может быть и такой структурно ошибочный вариант) привести к виду "{tagged_text}".

Я для этой цели сегодня взялся за изучение регэкспов, и наваял выражение
preg_replace("/^<p>(.+)?<\/p>\$/i", "\\1",$text);, но оно не работает...Т.е. если есть оба тэга (<p>, </p>)- всё ОК. Но если один из них отсутствует, замены не происходит.
Помогите исправить ошибку!
 

Demiurg

Guest
shingrus, не надо использовать регулярные выражения там, где можно обойтись strip_tags или str_replace.
 

Ямерт

The Old One
2тони:
> Такая задача: есть текст с тэгами
Нужно почикать только возможные <p> и </p>, ограничивающие основной текст {tagged_text}, т.е. только эти тэги и на самом верхнем уровне.

2shingrus:
Не работает.
 

shingrus

Guest
2 dimiurg - человек изучает регулярные выражении и просит помочь.
2 ямерт. убери пробелы после ">", их пхп клуб автоматически вставил...,
с какой строкой?
у меня, почему-то, не знаю почему, работает....
 

shingrus

Guest
2 ямерт, а что значит на самом верхнем уровне?
 

Demiurg

Guest
$text = str_replace(array('<p>' , '</p>') , array('','') , $text);
2 shingrus : "Я для этой цели сегодня взялся за изучение регэкспов" чувствуешь для чего они ему ?
 

Ямерт

The Old One
2 shingrus:
Ну текст сам по себе тоже может содержать тэги, в т.ч. <p>. Т.е. текст <p>One<p>Two</p></p> надо преобразовать к виду One<p>Two</p>.

> 2 shingrus : "Я для этой цели сегодня взялся за изучение регэкспов" чувствуешь для чего они ему ?

Да ладно вам :)
 

Ямерт

The Old One
2 shingrus:
Спасибо! Я немного изменил то, что ты предложил, и всё порулило ;) :

preg_replace("/^(<p>)|(<\/p>)\$/i","",$text);

2все:
P.S. Прошу прощения, если с самого начала неудачно разъяснил суть проблемы!
 

shingrus

Guest
смотри! "<p>One<p>Two</p></p> ", а если нет первого <p>?
что надо убрать? <p> после "ONE", или ничего? боюсь, что задачка в один проход не укладывается.
3 варинта: есть оба тега, есть только первый (открывающий), есть только закрывающий, что надо сделать во всех этих случаях? а вообще зачем тебе это?
 

shingrus

Guest
Автор оригинала: Ямерт
2 shingrus:
Спасибо! Я немного изменил то, что ты предложил, и всё порулило ;) :

preg_replace("/^(<p>)|(<\/p>)\$/i","",$text);

2все:
P.S. Прошу прощения, если с самого начала неудачно разъяснил суть проблемы!
ты просто не до конца объяснил исходные данные... -))), рад был помочь.
 
Сверху