Подскажите регулярку для удаления тега по части его содержимого

flower

Новичок
Подскажите регулярку для удаления тега по части его содержимого

Пример:

<tag1><tag2 value attribute><tag3>

Нужно регулярное выражение, которое вырежет фрагмент "<tag2 value attribute>" потому, что он содержит в себе "attribute".

/<.*attribute.*>/ вырезает также "<tag1>" и "<tag3>", а этого не нужно. Нужно как-то указать, что внутри вырезаемого тега не должно быть других тегов, но вставить "[^>]" никуда не получается. Help..
 

Ravanger

Новичок
если по простому
PHP:
<?php
$pattern = "/>(<.*attribute.*>)</";
$need = '<tag1><tag2 value attribute><tag3>';
preg_match($pattern, $need, $matches);

var_dump($matches);
array
0 => string '><tag2 value attribute><' (length=24)
1 => string '<tag2 value attribute>' (length=22)
 

Zetruger

ivan.chistyakov.name
Автор оригинала: Ravanger
если по простому
PHP:
<?php
$pattern = "/>(<.*attribute.*>)</";
$need = '<tag1><tag2 value attribute><tag3>';
preg_match($pattern, $need, $matches);

var_dump($matches);
array
0 => string '><tag2 value attribute><' (length=24)
1 => string '<tag2 value attribute>' (length=22)
четовы гоните батенька

PHP:
<?php 
$pattern = "/>(<.*attribute.*> )</"; 
$need = '<tag1><tag2 value attribute><tag3>'; 
preg_match($pattern, $need, $matches); 

var_dump($matches);
?>
array(0) { }
 

Ravanger

Новичок
хым...

аа, сорре, там пробел видимо случайно вставил в паттерне

надо так
PHP:
$pattern = "/>(<.*attribute.*>)</";

---

хех... он его сам ставит о_О
 

Zetruger

ivan.chistyakov.name
flower
по дефолту регулярки типа blabla* - жадные, т.е. захватывают все
есть модификатор, который это исправляет

как альтернативный вариант есть [^>] который самиже и предложили


и еще, это про preg_quote
The special regular expression characters are: . \ + * ? [ ^ ] $ ( ) { } = ! < > | :
 

Zetruger

ivan.chistyakov.name
flower

зачем тебе ( ) скобки, тыж вроде удалять собрался?

прочти внимательно
The special regular expression characters are: . \ + * ? [ ^ ] $ ( ) { } = ! < > | :
 

flower

Новичок
Скобки по ошибке.
Символы < и > заэкранировал, thanx. Странно, что без экранировки тоже работало :)

-~{}~ 03.12.08 17:44:

Вырезалка для тегов <img ... width=100 ... height=100>:

$content=preg_replace("/\<[^\>]*img[^\>]*(width[^\>]*100[^\>]*height[^\>]*100)[^\>]*\>/i","",$content);

Как можно упростить?
 
Сверху