Регулярное выражение для обработки HTML кода
В нашей корпоративной CMS используется достаточно известный визуальный редактор tinyMCE. Этот самый редактор генерирует служебные параметры в HTML коде и выглядит это примерно так:
Код:
<img height=55 alt=" " src="http://www.google.ru/images/logo_sm.gif" width=150 mce_src="http://www.google.ru/images/logo_sm.gif">
Вот этот самый параметр mce_src надо убрать. Кто что посоветует? На мой взгляд можно попробовать убить такие параметры в коде с помощью регулярки, но самому написать мне ее так и не удалось.
То есть в итоге я должен получить такой код:
Код:
<img height=55 alt=" " src="http://www.google.ru/images/logo_sm.gif" width=150>
ЗЫ Возможные имена параметров mce_src, mce_href, mceClass и т.д.
ЗЗЫ PHP 5, FreeBSD 6.*, Apache 1.3.*
В JS это будет так:
Для
<img height=55 alt=" " src="http://www.google.ru/images/logo_sm.gif" width=150 mce_src="http://www.google.ru/images/logo_sm.gif">
/mce_src=\"http:\/\/.+\"/
читается как: сначало идет mce_src="http://, затем любой символ кроме символа перехода на новую строку (.), который появляется один или более раз (+), за которым идет знак кавычек.
А если это будет mceClass="mceIndexClass1"
А если это будет mceClass="mceIndexClass1"[/QUOTE]
Тогда пробуй
/mce.+?=\"http:\/\/.+|.+\"/
/mce[\w]+=\".+\"/
читается как: сначало идет mce, затем символы слов (a-z, A-Z, 0-9), которые появляется один или более раз (+), затем знаки = и ", потом любые символы кроме перехода на новую строку (.), который появляется один или более раз (+), за которым идет знак кавычек.
/mce[\w]+=\".+\"/
читается как: сначало идет mce, затем символы слов (a-z, A-Z, 0-9), которые появляется один или более раз (+), затем знаки = и ", потом любые символы кроме перехода на новую строку (.), который появляется один или более раз (+), за которым идет знак кавычек.[/QUOTE]
Обрати внимание, что унего там может быть подчеркивание (_)
Проблема такова что из достаточно объемного HTML кода нужно выкинуть все такие параметры... А поскольку это все таки корпоративная CMS то страницы могут быть весьма объемными. Самая большая проблема для меня оказалась в том, что я не смог заставить регулярку остановиться на кавычке... она находила первый подобный параметр и принимала весь код от этого параметра до самого конца за свойство подлежащее удалению.
Задача такова: найти все свойства начинающиеся на mce и удалить их...
ЗЫ свойства могут содержать не только URL но и название класса или относительный путь
mce[\w]+=\".+\"
Цитата:
Обрати внимание, что унего там может быть подчеркивание (_)
Опечатался. В \w символ "_" тоже входит (a-z, A-Z, 0-9, _)
а чтобы он не спотыкался об последнюю кавычку можно так:
/^mce[\w]+=\".+\"$/
^ - начало шаблона
$ - конец шаблону
а вообще, например JS кавычки можно не экранировать, т.к. все выражение находится в слэшах (/.../). Такм экранироть нужно только спецсимвол-регулярны-выражений типа "+" и "." и тд.
Поэтому
/^mce[\w]+=".+"$/
Если не нравится точка её можно махнуть на [\w\/ ] - типа как (a-z, A-Z, 0-9, _, , /)
Я тестирую на таком примере:
Код:
<img src="http://www.google.ru/images/logo_sm.gif" mce_src="http://www.google.ru/images/logo_sm.gif"></img><img src="http://www.google.ru/images/logo_sm.gif" mce_src="http://www.google.ru/images/logo_sm.gif"></img>
<img src="http://www.google.ru/images/logo_sm.gif" mce_src="http://www.google.ru/images/logo_sm.gif"></img>
<img src="http://www.google.ru/images/logo_sm.gif" mce_src="http://www.google.ru/images/logo_sm.gif"></img>
то есть два тега в линию и один на новой строке.
Что же я получаю после применения регулярки
Код:
<img src="http://www.google.ru/images/logo_sm.gif" ></img>
<img src="http://www.google.ru/images/logo_sm.gif" ></img>
<img src="http://www.google.ru/images/logo_sm.gif" ></img>
То есть он взял и выделил так:
<img src="http://www.google.ru/images/logo_sm.gif" [COLOR="Blue"]mce_src="http://www.google.ru/images/logo_sm.gif"></img><img src="http://www.google.ru/images/logo_sm.gif" mce_src="http://www.google.ru/images/logo_sm.gif[/COLOR]"></img>
Вот как заставить его остановиться?
}{итро, ниче не скажешь :)
Если вдруг есть возможность подсчитать количество символов в кавычках ("http://www.google.ru/images/logo_sm.gif, $len = 9), то можно написать как
/^mce[\w]+=\".{9}\"/
Попробуй еще к последней кавычке применить {1}
/^mce[\w]+=\".+\"{1}/
И еще при каком конкретно предложенном выражении ты этот тест делал?
=)))
А применял я: mce[\w]+=\".+\"
Можно попробовать исключить знак ">"
mce[\w]+=\".+[^>]\"[^>]
Попробуй так же
mce[\w]+=\".+\"[^>] и mce[\w]+=\".+[^>]\"
вообще бред получается...
Вот так будет точнее
Вот так будет точнее[/QUOTE]
РЕСПЕКТ!
Если этот параметр стоит последним и после него идет пробел или треугольная скобка - все ОК. А что делать если он стоит в начале?
Например тут уже не работает.
<a mce_href="http://www.yandex.ru" href="http://www.yandex.ru" title="yandex">
Ты просто мозг - уверен ты знаешь ответ
mce[\w]+=\"[^> ]+\"
Добавлен проблел [^>[COLOR="Red"]_[/COLOR]]
mce[\w]+=\"[^> ]+\"
Добавлен проблел [^>[COLOR="Red"]_[/COLOR]][/QUOTE]
Мегареспект! Спасибо!:)
Цитата: RussianSpy
+"
Добавлен проблел [^>[COLOR="Red"]_[/COLOR]]
Добавлен проблел [^>[COLOR="Red"]_[/COLOR]]
Мегареспект! Спасибо!:)
Ребят полностью аналогичная проблема, помогите пожалуйста. Вижу, что вы нашли решение, только я не силён в JS. Куда нужно вставить данный код, чтобы убрать подобные теги mce_href ?