Перейти к содержанию
Официальный форум поддержки Simpla

помогите с регуляркой


Перейти к решению Решено yr4ik,

Рекомендуемые сообщения

yr4ik, Ваш код не хочет работать, та же проблема что в самом начале.

Спасибо всем за помощь, код mishanya прекрасно справляется с задачей.

 

А проблему нельзя конкретно описать??

Скорее всего вы просто не правильно его в код вставили....

Ссылка на сообщение
Поделиться на другие сайты

Вставил так:

public function hashtag_modifier($str)
	{
$new_str = $str;
if(preg_match_all('#(style|href)=([\'"])([^\'"]+?)\\1#iu', $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Затираем style
	foreach($matches as $m){
		$_length = strlen($m[0][0]);
		$new_str = substr_replace($new_str, str_repeat('*', $_length), $m[0][1], $_length);
	}
}

if(preg_match_all('/#(\w+)/iu', $new_str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Поиск наших тегов
	$_offset = 0;
	foreach($matches as $m){
		$_length = strlen($m[0][0]);
		$replace = '<a href="tags?keyword='.$m[1][0].'">#'.$m[1][0].'</a>';
		$str = substr_replace($str, $replace, $m[0][1] - $_offset, $_length);
		$_offset += $_length - strlen($replace);
	}
}

return $str;
}
Ссылка на сообщение
Поделиться на другие сайты

Ну опять же - проблему не описали!

А по предыдущим постам не поймешь что за ошибка...

 

Интуитивно могу предположить что речь идет о игнорировании тегов типа ##tag

 

 

Если да то вторая регулярка так: 

if(preg_match_all('/(?<!#)#(\w+)/iu', $new_str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Поиск наших тегов
Ссылка на сообщение
Поделиться на другие сайты

Когда я вставляю ваш первый код, то возникает та же проблема что я описывал в посте: http://forum.simplacms.ru/topic/10886-%D0%BF%D0%BE%D0%BC%D0%BE%D0%B3%D0%B8%D1%82%D0%B5-%D1%81-%D1%80%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BA%D0%BE%D0%B9/?do=findComment&comment=83644

Ссылка на сообщение
Поделиться на другие сайты
  • Решение

Все понял. Исправил код в #24 посте (нужна обратная ссылка на \\2 а не на \\1):

if(preg_match_all('#(style|href)=([\'"])([^\'"]+?)\\2#iu', $str, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {//Затираем style

И лучше наверное затирать не атрибуты, а html теги. Оставлять только содержимое их.

Если хотите то правьте эту регулярку на поиск html тегов (в инете есть готовые), а не атрибутов href  и style.

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Все работает как надо, добавил еще варианты |bgcolor|bordercolor, пока косяки в статьях и описаниях товара не обнаружены. 

Спасибо огромное!  :)

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...