Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11811
Последний выпуск: 19.06.2015

Регулярное выражение для обработки HTML кода

13
07 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
К сожалению, регулярки до сих пор остаются моим слабым местом и потому обращаюсь к вам други!

В нашей корпоративной 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.*
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
регулярки в PHP не знаю, а может они такие же как и в JS.

В 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://, затем любой символ кроме символа перехода на новую строку (.), который появляется один или более раз (+), за которым идет знак кавычек.
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
=)
А если это будет mceClass="mceIndexClass1"
8
08 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=RussianSpy]=)
А если это будет mceClass="mceIndexClass1"[/QUOTE]
Тогда пробуй
/mce.+?=\"http:\/\/.+|.+\"/
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
Не.

/mce[\w]+=\".+\"/

читается как: сначало идет mce, затем символы слов (a-z, A-Z, 0-9), которые появляется один или более раз (+), затем знаки = и ", потом любые символы кроме перехода на новую строку (.), который появляется один или более раз (+), за которым идет знак кавычек.
8
08 августа 2006 года
mfender
3.5K / / 15.06.2005
[QUOTE=Unglued]Не.

/mce[\w]+=\".+\"/

читается как: сначало идет mce, затем символы слов (a-z, A-Z, 0-9), которые появляется один или более раз (+), затем знаки = и ", потом любые символы кроме перехода на новую строку (.), который появляется один или более раз (+), за которым идет знак кавычек.[/QUOTE]
Обрати внимание, что унего там может быть подчеркивание (_)
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
ребят... Все гораздо сложнее... Иначе я не стал бы тут постить, а разобрался бы сам... Есть несколько тегов куда редактор гадит своими служебными параметрами: img, a, table и еще возможно какие-то про которые я пока не знаю. Туда он дабавляет свойства которые начинаются на mce. Например mce_src, mce_href, mceClass, mceParam и какие-то еще...

Проблема такова что из достаточно объемного HTML кода нужно выкинуть все такие параметры... А поскольку это все таки корпоративная CMS то страницы могут быть весьма объемными. Самая большая проблема для меня оказалась в том, что я не смог заставить регулярку остановиться на кавычке... она находила первый подобный параметр и принимала весь код от этого параметра до самого конца за свойство подлежащее удалению.
Задача такова: найти все свойства начинающиеся на mce и удалить их...

ЗЫ свойства могут содержать не только URL но и название класса или относительный путь
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Вот это кстати работает верно... Но только если между тегами сожержащими параметры mce есть перевод строки. Если перевода нет - опять все сливается...
mce[\w]+=\".+\"
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
Цитата:
Обрати внимание, что унего там может быть подчеркивание (_)


Опечатался. В \w символ "_" тоже входит (a-z, A-Z, 0-9, _)

а чтобы он не спотыкался об последнюю кавычку можно так:

/^mce[\w]+=\".+\"$/

^ - начало шаблона
$ - конец шаблону

а вообще, например JS кавычки можно не экранировать, т.к. все выражение находится в слэшах (/.../). Такм экранироть нужно только спецсимвол-регулярны-выражений типа "+" и "." и тд.

Поэтому

/^mce[\w]+=".+"$/

Если не нравится точка её можно махнуть на [\w\/ ] - типа как (a-z, A-Z, 0-9, _, , /)

13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Наоборот надо чтобы он спотыкался на кавычке.
Я тестирую на таком примере:
 
Код:
<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" [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>

Вот как заставить его остановиться?
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
А нет возможности пробел воткнуть тут sm.gif"[COLOR="Red"]_[/COLOR]></img? :)))

}{итро, ниче не скажешь :)

Если вдруг есть возможность подсчитать количество символов в кавычках ("http://www.google.ru/images/logo_sm.gif, $len = 9), то можно написать как
/^mce[\w]+=\".{9}\"/

Попробуй еще к последней кавычке применить {1}

/^mce[\w]+=\".+\"{1}/

И еще при каком конкретно предложенном выражении ты этот тест делал?
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Смотрю я на свой код и думаю "а откуда взялось <img></img>?"
=)))
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Нет возможности ничего никуда воткнуть и стандартизировать. Повторюсь - этот код генерирует визуальный редактор tinyMCE работающий в корпоративной CMS. Заранее НЕВОЗМОЖНО знать какие страницы там будут набирать и что они будут содержать.

А применял я: mce[\w]+=\".+\"
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
Я понял что он делает.

Можно попробовать исключить знак ">"

mce[\w]+=\".+[^>]\"[^>]

Попробуй так же

mce[\w]+=\".+\"[^>] и mce[\w]+=\".+[^>]\"
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
Неа
вообще бред получается...
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
mce[\w]+=\"[^>]+\"

Вот так будет точнее
13
08 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=Unglued]mce[\w]+=\"[^>]+\"

Вот так будет точнее[/QUOTE]
РЕСПЕКТ!
Если этот параметр стоит последним и после него идет пробел или треугольная скобка - все ОК. А что делать если он стоит в начале?
Например тут уже не работает.
<a mce_href="http://www.yandex.ru" href="http://www.yandex.ru" title="yandex">

Ты просто мозг - уверен ты знаешь ответ
2.8K
08 августа 2006 года
Unglued
119 / / 15.09.2005
Попробуй так.

mce[\w]+=\"[^> ]+\"

Добавлен проблел [^>[COLOR="Red"]_[/COLOR]]
13
09 августа 2006 года
RussianSpy
3.0K / / 04.07.2006
[QUOTE=Unglued]Попробуй так.

mce[\w]+=\"[^> ]+\"

Добавлен проблел [^>[COLOR="Red"]_[/COLOR]][/QUOTE]
Мегареспект! Спасибо!:)
98K
17 марта
Кирилл Мироненко
1 / / 17.03.2017
Цитата: RussianSpy
+"

Добавлен проблел [^>[COLOR="Red"]_[/COLOR]]

Мегареспект! Спасибо!:)

Ребят полностью аналогичная проблема, помогите пожалуйста. Вижу, что вы нашли решение, только я не силён в JS. Куда нужно вставить данный код, чтобы убрать подобные теги mce_href ?

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог