2015-07-13 2 views
2

Мне нужно найти & замените внутри HTML-теги CSS, которые были встроены, чтобы избежать использования встроенного атрибута style="".Regex search & replace inline CSS style

I.e. заменить что-то, что выглядит следующим образом:

<table border="0" cellpadding="0" cellspacing="0" width="100%" style="font-family: Helvetica;line-height: 100%;margin-top: 20px; text-align: left;vertical-align: bottom;color: #202020"> 

во что-то вроде этого:

<table border="0" cellpadding="0" cellspacing="0" width="100%" font-family="Helvetica" line-height="100%" margin-top="20px" text-align="left" vertical-align="bottom" color="#202020"> 

Кто-то знает регулярное выражение для поиска & заменить Я бы написать для того, чтобы сделать это?

Спасибо.

+0

Я не думаю, что вы можете сделать это за один проход. Я бы сделал это с помощью 'preg_replace_callback' в PHP. Начните с 'style =" (. +?) "'. Также нет способа узнать, действительны ли атрибуты, идущие по этому маршруту. – chris85

+1

Что вы пытаетесь сделать? Атрибут 'font-family' в теге' table' ничего не будет делать. –

ответ

2

Используйте это регулярное выражение замены:

(?:\G(?!^)|\bstyle=")([^:]*):\s*([^;]*)[;"](?=[^>]*>) 

Заменить (возражаете пространство в конце):

$1="$2" 

Вот a demo

ОБЪЯСНЕНИЕ

  • (?:\G(?!^)|\bstyle=") - Граница, где мы начнем наше согласование. Граница - это конец предыдущего матча (\G(?!^)) или style=" (из-за \bstyle=").
  • ([^:]*) - 1-я группа записи, которая содержит последовательность 0 или более символов, кроме :
  • : - буквальная :
  • \s* - 0 или более пробельного
  • ([^;]*) - 2-я группа записи, которая содержит последовательность из 0 или более символов, кроме ;
  • [;"] - либо ; или "
  • (?=[^>]*>) - Мы проверяем границу окончания, чтобы убедиться, что мы находимся внутри закрывающего тега.
+0

Я добавил объяснения. –

+1

О, давай, тот, кто ниспровергнут - позор тебе! Покажите свое смелое лицо, воин! –

+1

спасибо, но ваше регулярное выражение терпит неудачу, когда есть 2 'style =" some css style "' в той же строке – ericn

1

Вы можете сделать это следующим образом:

  1. Match style="(.*?)" и сохранить захваченную группу переменного.
  2. Установите эту переменную ([a-zA-Z-]+):\s*(.*?)\s*; и замените ее на {1}="{2}".
  3. Заменить style=".*?" с результатом числа 2.
+0

'style =" (. *?) "' Было замечательно, и в моем случае я использовал то же самое для замены всех этих абсолютных определений высоты с помощью 'height = 'auto''.Очень полезно! – Abram