Перейти к контенту

Регулярные выражения


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

Стоит такая задача есть какой то произвольный текст, содержаший выделенные жирным фрагменты , и выделенные жирным имена в виде

[B]2[COLOR=red]ИМЯ[/COLOR][/B]

Вопрос как с помощью регулярных выражений выдрать выделенный жирным текст и при этом не хапнуть имя :D ?

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

Не понял, т.е. заменять

[b]....text...[/b]

, но не заменять

[b]...[color...]...[/b]

?

 

Формализуй задачу.

 

Кстати, в регекспах обычно действует такая интересная особенность - когда ясно поставишь задачу, то сразу и решение становится понятно :D

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

Balancer

не заменить а выдрать , т.е. если в общем тексте присутствует

<b>text</b>

(я вначале малость неточно выразился ведь в БД уже хранятся html теги) то нужно грубо говоря

$temp[] = "text"

но нивкоем случае не

$temp[] = "2<font color=red>text</font>

 

Сейчас юзаю

preg_match("'<b>.*?</b>'si", $first,$find);

но оно и левак вылавливает

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

Не понял, тебе из вырезанного результата нужно тэги выкусить? Так в PHP есть функция http://php.net/strip_tags

 

Если что-то другое - учись выражаться яснее, всегда полезно :D

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

блин , я уже незнаю КАК яснее , ну попробуем так

Пример :

 

$first="траляля траляля какая то фигня , еще какая то фигня <b>2<font color=red>Balancer</font></b> еще идет текст и еще и еще skdufksudhfk далее полный бред и вот щас бдует то что енужно опознать и захватить <b>ВОТ_ЭТОТ_ТЕКСТ_НУЖНО_ПРИСВОИТЬ_ПЕРЕМЕННОЙ</b> далее идет еще бред"

 

Так понятней ? Вот если к этому тексту мы применим

preg_match("'<b>.*?</b>'si", $first,$find);

а затем

$words = "$find[0]";

то получим $words = "2<font color=red>Balancer</font>" а не

$words = "ВОТ_ЭТОТ_ТЕКСТ_НУЖНО_ПРИСВОИТЬ_ПЕРЕМЕННОЙ"

 

Бдин , незнаю я куда уж яснее :D

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

  • 4 недели спустя...

Честно говоря, меня даже забавляет то, как человек не может сформулировать то, что ему нужно.

 

Повторюсь: в регекспах обычно действует такая интересная особенность - когда ясно поставишь задачу, то сразу и решение становится понятно.

 

По последнему примеру могу тольео предложить

preg_match("'^.*<b>.*?</b>.*?$'si", $first,$find);

 

Тогда он не хапнет первое вхождение, а хапнет последнее.

 

Нет, народ, ну как можно лезть писать программу, настолько не умея сформулировать чего хочется в итоге?

 

Тысячу раз сказано, что "неясность речи есть неясность мысли".

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

Anarki

ну проблему я уже решил но от дополнительной инфы не откожусь

кидай на mitosmail<ет>ua.fm :D

Balancer

я тебе уже конкретный пример привел того что было нужно, я не знаю КАК мне надо выразиться что б ты понял :) ИМХО приведенного примера должно было хватить .

Мож так поймешь чего я добивался http://pricools.vbios.com/forum/index.php?showtopic=504 ? и ты сможешь мне на будущее сказать КАК я должен был это описать ;)

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

ля ля <b>ВОТ_ЭТОТ_ТЕКСТ_НУЖНО_ОТЛОВИТЬ</b> ля ля

preg_match("'<b>.*?</b>'si", $first,$find);

 

не знаю заработает или нет

preg_match("'<b>[а-яА-Я]{3,}</b>'si", $first,$find);

3 это минимальная длина слова...

а-я А-Я это слова из каких букв пропускать

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

Valera

спасиба ;) правда таким образом я всеравно смог отсекать только обращение к имени (2ИМЯ) а всякие "цитата" и "добавленно" как то не шибко :D да я его уже и так отсекаю с помощью \D

В общем без предварительного вырезания последних нафиг с помощью preg_replace наверно всеже не обойтись

$tempr =" $row->post ";
$tempr= preg_replace("'<b>Дополнение @.*?</b>'si", "" , $tempr , -1);
$tempr= preg_replace("'<b>Цитата*?</b>'si", "" , $tempr , -1);
$temp = preg_match("'<b>\D.*?</b>'si", $tempr, $find);

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

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

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

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

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

  Допустимо не более 75 смайлов.

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

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

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

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

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.