вырезать все кроме нужного текста

alexey84

phplancer
вырезать все кроме нужного текста

задача вот такая
есть строка
$str= "<span style=\"font-weight: bold;color:red\">222</span>";
из стилей надо вырезать все кроме font-weight: bold

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

Gas

может по одной?
if (false !== strpos($str, 'font-weight: bold')) $str = 'font-weight: bold';
или
$str = preg_replace('^.*(font-weight: bold).*$', '$1', $str);
 

alexey84

phplancer
ну тут результат получается font-weight: bold, а мне надо
<span style="font-weight: bold">222</span>
 

Gas

может по одной?
а, проглядел "из стилей"
ну тогда я бы сделал как-то так:
$str = preg_replace('~(<[^>]+ style=["']).*(font-weight:\s*bold).*(['"])~isU', '$1$2$3', $str);
 

alexey84

phplancer
Gas
нефига не подходит
kruglov
preg_replace_callback - еще больше заморочился, а как?
 

Bakti9rov

!*|=?
PHP:
function filter_style($style) { return 'style="font-weight:bold"';}

print preg_replace_callback('|style=".*?"|', 'filter_style', $str);
:D
 

Gas

может по одной?
alexey84
посмотреть на сообщение об ошибке и добавить экранирование одиночных кавычек в реге слабо ?
 

alexey84

phplancer
Gas
ну не совсем тупой, ессно добавил всеравно не режит как надо

-~{}~ 26.05.08 17:06:

Bakti9rov
у меня кроме bold еще разрешено несколько стилей
font-weight: bold;
font-weight: normal;
font-style: italic;
поэтому это не подходит
 

Gas

может по одной?
:)
тут естественно телепаты и сами обо всё догадываются

допили callback функцию filter_style, там реги уже и не нужны.
 

crocodile2u

http://vbolshov.org.ru
Народ, кончайте с ним цацкаться. Если он после всего, что написано, не сможет решить свою проблему - он неизлечим. Кроме того, он нас еще за нос водит! То ему только болд нужен, то целый набор...
 

alexey84

phplancer
crocodile2u
я смотрю очень разговорчивый, такие как ты только могут сидеть и плакать как их тут все обижают, я реально не могу решить задачу, ну да не правильно изначально вопрос поставил, прошу прощения, че ты базар разводишь

Gas
спасибо
 

alexey84

phplancer
решил задачу кому то может пригодится
function test1($p)
{
$acc = array(
'font-weight: bold',
'font-weight: normal',
'font-style: italic',
'font-style: normal',
'text-decoration: underline',
'text-decoration: line-through',
'text-decoration: none'
);
$str = '';
$ar = explode(";",$p[1]);
$max = sizeof( $ar );
for( $i = 0; $i < $max; $i++ ) {
if( in_array($ar[$i], $acc) ) {
$str .= $ar[$i].';';
}
}
return 'style="'.$str.'"';
}
$_POST['messageText'] = preg_replace_callback("/style=[\"|\'](.*?)[\"|\']/is", "test1", $_POST['messageText']);
 
Сверху