Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Помогите составить регулярное выражение


Автор: wertklop 15.5.2014, 23:12
Здравствуйте всем!

Есть повторяющаяся строка вида: "[tag]Какой-то текст<p> </p>Ещё какой-то текст[/tag]"
Задача в том, чтобы теги <p> и </p> заменить на '', т.е. убрать, но обязательно в пределах строки [tag]...[/tag]. В итоге должно получиться так:
"[tag]Какой-то текст Ещё какой-то текст[/tag]"

Уважаемые, помогите составить регулярку, наверняка она несложная, но у меня пока возникают трудности с ней

Автор: Sanchezzz 16.5.2014, 23:05
#\[tag\](.*)\[\/tag\]#is

воде так, могу ошибиться я в пьянящим состоянии

Автор: Romikgy 17.5.2014, 11:32
это выберет только инфу между tag а заменить надо еще будет ..
только теги <p> </p> или будут другие ?

Автор: Gold Dragon 21.6.2014, 21:00
Имеем начальный текст:
Код

$str = '[tag]Какой-то текст<p> </p>Ещё какой-то текст[/tag]';

Хотя очень странный текст, почему-то очень странный разделитель. Ну уж теперь какой есть

И тут существует огромное количество способом удалить эти теги. Я покажу три:
1. Удаление.. Почему удаление, да потому что из вопроса не понятно нужны ли разделители
2. Замена
3. Разбитие на массив

Но для начала нам нужно получить данные всё что между [tag]...[/tag]

Код

// Нужно определить переменную, дабы кто-то ещё ещё где-нибудь не определил :)
$matches = null;

$returnValue = preg_match('#\[tag\](.*)\[/tag\]#isu', $str, $matches);

// Результат
echo $matches[1] . '<hr>';
//
Теперь мы имеем данные для обработки
Код

$str_new = $matches['1'];

Первый способ
Очень не понятный, но по условию задачи применимый. Тут всё до предела банально до безобразия
Код

$returnValue = preg_replace('#<p>|</p>#ius', '', $str_new);

// Результат
echo $returnValue . '<hr>';

Второй способ
Только нужно на что заменять: на пробел или запятую или на знак рубля.
И ещё, так как не совсем понятно сколько пробелов  и есть ли они вообще между тегами, то добавим дополнительное условие
Код

$returnValue = preg_replace('#<p>\s*</p>#isu', ',', $str_new);

// Результат
echo $returnValue . '<hr>';

Хотя таким способом можно и удалять ...

Ну и третий способ это просто сделать набор этих тегов.
Мне кажется это более логичным, т.е. сделать массив а уж потом что угодно можно с этим вытровать
Код

$returnValue = preg_split('#<p>\s*</p>#isu', ',', $str_new);

// Результат
print_r($returnValue); echo '<hr>';

Например получить теги через запятую
Код

echo implode(',', $returnValue);


wertklop, если что не понятно, пиши, отвечу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)