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

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


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

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

[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);

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

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

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

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

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

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

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

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

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