2010-06-24 2 views
1

мне нужен expresssion PCRE (регулярное выражение), чтобы соответствовать и заменить определенный атрибут и значение, связанное с элементом разметки, что-то вроде этого:PCRE заменить стиль разметки

<div style="width:200px;"></div> 

в

<div style="width:100px;"></div> 

Что Я сейчас разобран simplehtmldom является содержанием стиля в виде обычного текста, например:

width:200px; 

Как я могу сопоставить атрибут CSS и заменить его новыми значениями в PHP?

Cheers!

+0

Какие параметры вы передаете, 'width' и' 100px'? – serg

+0

значение только. Я хочу найти атрибут и заменить его значение – yoda

ответ

2
([^\s:]+)[\s:]+([^:;]+) 

будет извлекать значения вокруг толстой кишки в обратные ссылки 1 и 2.

([^\s:]+)[\s:]+(\d+)(\w+) 

будет делать то же самое, но извлечь значение (200) и блок (ПВ) отдельно.

if (preg_match('/([^\s:]+)[\s:]+(\d+)(\w+/', $subject, $regs)) { 
    $attribute = $regs[1]; 
    $value = $regs[2]; 
    $unit = $regs[3]; 
} else { 
    // no match 
} 
+1

+1 Это хорошее решение, но оно не может справиться с пробелом после двоеточия, что довольно часто. Это должно сортировать его: '/ ([^ \ s:] +) [\ s:] * (\ d +) (\ w +) /' – Mike

+1

Спасибо - я отредактировал свой ответ. Я использовал '[\ t]' вместо '\ s', чтобы быть немного более явным - или могли ли появляться новые строки там? –

+0

Хороший вопрос. Я не проверял спецификации, но вместо этого я только что изменил CSS на одной из моих тестовых страниц. Новые строки как до, так и после двоеточия, по-видимому, не беспокоят Firefox в малейшей степени, поэтому я думаю, что менее явным является путь. – Mike

-2
preg_replace('~width:200px~', 'width:100px', $subject); 
+1

, которое работает только в том случае, если ожидается, что атрибут и значение будут такими. – yoda