Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регулярное выражение для добавленя класса

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
RickMan
Отправлено: 06 Октября, 2014 - 16:24:05
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Подскажите как будет выглядеть регулярное выражение которое в некотором тексте ко всем таблицам добавляет класс table. Тоесть если имеет:
Цитата:
текст<table style="текст" width="что-то">кучу текста</table>еще кучу текста

то получим:
Цитата:
текст<table style="текст" width="что-то" class="table">кучу текста</table>еще кучу текста

Так же у таблицы возможно уже стоит class="" с некими другими классами, и в этом случае нужно добавить указанный класс.
Заранее спасибо.
 
 Top
dcc0
Отправлено: 06 Октября, 2014 - 17:28:09
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




? Демо версия =)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $src="текст<table style=\"текст\" width=\"что-то\">кучу текста</table>еще кучу текста";
  4.  
  5. $l = preg_replace('/<table.*width.*\"/', '$0 class="table"',  $src);
  6.  
  7. echo $l;
  8. ?>
  9.  
  10.  

(Отредактировано автором: 06 Октября, 2014 - 17:31:05)



-----
Март 2021. Бросил программирование
 
 Top
RickMan
Отправлено: 06 Октября, 2014 - 17:34:03
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Это решение отлично справляется если class не задано. А что делать если class задан? К примеру:
PHP:
скопировать код в буфер обмена
  1. $src="текст<table style=\"текст\" width=\"что-то\" class=\"test\">кучу текста</table>еще кучу текста";

(Добавление)
Если просто добавить class то можно и через str_replace сделать)
 
 Top
MiksIr
Отправлено: 06 Октября, 2014 - 18:00:43
Post Id


Забанен


Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014  


Помог: 10 раз(а)

[+]


Можно делать в две регулярки. Сначала добавить class где нет
preg_replace('/<table(?![^>]+class=)/', '<table class=""', $html);
Потом добавить класс
preg_replace('/<table[^>]+class="/', '\0class ', $html);


-----
self-banned
 
 Top
dcc0
Отправлено: 06 Октября, 2014 - 18:20:40
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Ты ведь добавляешь класс, либо меняешь класс. Тогда сначала удаляешь класс у всех подобных таблиц, вторым проходом добавляешь нужный.

(Отредактировано автором: 06 Октября, 2014 - 18:23:13)



-----
Март 2021. Бросил программирование
 
 Top
dcc0
Отправлено: 06 Октября, 2014 - 23:11:50
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Как-то так может:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $src="текст<table style=\"текст\" width=\"что-то\" class=\"some\">кучу текста</table>еще кучу текста";
  5. $m = preg_replace('/(\<table.*width.*)(class.*\")(\>)/', '$1$3',  $src);
  6. $l = preg_replace('/<table.*width.*\"/', '$0 class="table"',  $m);
  7. echo $l;
  8.  
  9. ?>
  10.  
  11.  
  12.  


-----
Март 2021. Бросил программирование
 
 Top
RickMan
Отправлено: 06 Октября, 2014 - 23:43:27
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Не, я же писал, что не заменять, а добавлять надо. То есть в моем примере у таблицы должно быть уже два класса: some и table... мало ли что там пришло от пользователя...
 
 Top
dcc0
Отправлено: 06 Октября, 2014 - 23:56:06
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $src="текст<table style=\"текст\" width=\"что-то\" class=\"some\">кучу текста</table>еще кучу текста";
  5. $l = preg_replace('/<table.*width.*\"/', '$0 class="table"',  $src);
  6. echo $l;
  7.  
  8. ?>
  9.  
  10.  
  11.  

У меня вывод вот этого кода вот такой:

CODE (html):
скопировать код в буфер обмена
  1. текст<table style="текст" width="что-то" class="some" class="table">кучу текста</table>еще кучу текста

(Добавление)
Но тем не менее:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $src="текст<table style=\"текст\" width=\"что-то\" >кучу текста</table>еще кучу текста";
  5. $l = preg_replace('/(?(?=\<table.*).*width.*\"|.*class.*\")/', '$0 class="table"',  $src);
  6. echo $l;
  7.  
  8. ?>
  9.  
  10.  
  11.  


-----
Март 2021. Бросил программирование
 
 Top
RickMan
Отправлено: 07 Октября, 2014 - 00:12:33
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Я не уверен, но мне кажется два class будут работать не корректно. Один будет скорее всего игнорироваться. Поэтому возможно ли получить class="some table" ?
 
 Top
dcc0
Отправлено: 07 Октября, 2014 - 02:05:14
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Скорее, работать будет тот, который есть действительно:
Спойлер (Отобразить)

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

Лучше я пока не придумал.

В общем пока так:

PHP:
скопировать код в буфер обмена
  1. <?
  2.  
  3. $src="текст<table style=\"текст\" width=\"что-то\" class=\"something\">кучу текста</table>еще кучу текста";
  4. $check=preg_match_all('/\<table.*(class.*)\>/', $src);
  5.  
  6. if($check!=0) {
  7.  
  8. $pattern[0]='/\<table.*class.\"*/';
  9. $replace[0]='$0table ';
  10. }
  11. else {
  12. $pattern[0]='/\<table.*\"/';
  13. $replace[0]='$0 class="table" ';
  14. }
  15. $l = preg_replace($pattern, $replace,  $src);
  16. echo $l;
  17.  
  18. ?>
  19.  
  20.  
  21.  

Печаль еще заключается в том, что при таком подходе может понадобится отдельная функция, если, например, могут придти две таблицы - одна с class, другая без

(Отредактировано автором: 07 Октября, 2014 - 10:41:29)



-----
Март 2021. Бросил программирование
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB