Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите пожалуйста с регулярным выражением для преобразования HTML-тэгов.

Сообщения:  [1-10]   [11-13] 

 
 автор: mikha   (02.03.2008 в 16:21)   письмо автору
 
   для: drozd   (28.02.2008 в 14:37)
 

Может я чего то не догоняю, что мешает менять
<span style="color: red; font-size: 14pt">
на то что надо?
Не изобретая велосипеда и не городя огорода. (имеется в виду зачем изобретать сложные регулярные выражения). Попалось именно это, заменилось.
ЗЫ. у меня слишком мало опыта в этом.
Поэтому это скорее вопрос чем совет.

   
 
 автор: SHAman   (29.02.2008 в 13:43)   письмо автору
 
   для: exp   (28.02.2008 в 18:18)
 

Хм. Попробовал. Действительно, работает не совсем так, как ожидалось... С другой стороны, конструкция (1)|(2)|(3) не совсем верна. Если нужно захватить одну из альтернатив, то лучше так: (1|2|3). Хотя факт интересный.

#!/usr/bin/perl
$text1 = q(123 456 789 0);
$text2 = q(123 456 789 0);
$text1 =~ s/(123)|(45)|(89)/$1/g;
print "$text1\n";
$text2 =~ s/(123|45|89)/$1/g;
print $text2;

   
 
 автор: прапр   (29.02.2008 в 01:00)
 
   для: drozd   (28.02.2008 в 14:37)
 

прапр

   
 
 автор: exp   (28.02.2008 в 18:18)   письмо автору
 
   для: SHAman   (28.02.2008 в 17:42)
 

смотря для чего наверное
в перл даже не смог многое из того что в пхп легко
в пхп например preg_replace легко сделает все (....)|(.....) в $1
а тут только из первого возможного совпадения
<?perl
$arr
[$i] =~ s/(?<==~)(\s*m?(\/|;|:|'|").*?(?<!\x5c)(?:\x5c{2})*\2[c-x]*)|(?<==~)(\s*(?:tr|s)?(\/|;|:|'|").*?(?<!\x5c)(?:\x5c{2})*\4.*?(?<!\x5c)(?:\x5c{2})*\4[c-x]*))/<span class="rv">$1<\/span>/sg;

хотя может у меня просто такой перл , поставил новый , но не пробовал пока
// выражение только уже побилось кажется
///// чевоито ищё форум бэкслэши порезал, некоторые

   
 
 автор: SHAman   (28.02.2008 в 17:42)   письмо автору
 
   для: kasmanaft   (28.02.2008 в 17:27)
 

Не люблю я эти пхпшные функции:)
Вот в перле все ясно.
$text =~ /регулярка/моды - сравнение
$text =~ s/что /на что/моды - замена

А тут три тысячи функций и все неудобные)

   
 
 автор: exp   (28.02.2008 в 17:29)   письмо автору
 
   для: SHAman   (28.02.2008 в 16:57)
 

а так иногда удобно использовать preg_replace_callback()
<?
function splitattr($m)
{
// print_r($m);
 
$m[0] = split(':|;'$m[1]);
 
$v $m[1] =$m[3] = '';
 
while(
$v = ($v) ? trim(next($m[0])) : trim(current($m[0])))
 {
    if (
$v == '') continue;
    
$m[3] = '</' $v '>' $m[3];
    
$m[1] .= '<' $v '=' trim(next($m[0])) . '>';
 }
 return 
$m[1] . $m[2] . $m[3];
}

$str "You can add
<span style=\"color: red; font-size: 14pt\">
You can add colored text
</span>
colored text
"
;
$str preg_replace_callback('#<span style="?((?:[^:]*:[^;]*?;?)+?)"?[^>]>(.*?)</span>#s''splitattr'$str);
print 
'<pre>' htmlspecialchars($str) . '</pre>';

?>
только сама идея что на что заменять неочень.
и не с любыми тегами работает

// исправил 4 раза :)

   
 
 автор: kasmanaft   (28.02.2008 в 17:27)   письмо автору
 
   для: SHAman   (28.02.2008 в 16:57)
 

Торопилсо наверное :))

PS preg_replace() :)

   
 
 автор: drozd   (28.02.2008 в 16:58)   письмо автору
 
   для: KreZ0n   (28.02.2008 в 15:12)
 

Хорошо как выделить то что внутри ( " " ) и разбить их по ( ; )

   
 
 автор: SHAman   (28.02.2008 в 16:57)   письмо автору
 
   для: drozd   (28.02.2008 в 14:37)
 

Если нужно только колор и фонт, то можно так попробовать:

preg_replace_all("!<span.*?color:\s*(.*?);.*?font-size:\s*(\d+)>(.*?)</span>!is",
"<color = $1><font-size=$2>$3</font-size></color>", $text);


Не проверял.

Кстати, народ, обратите внимание, тут тег <font-size>, а не <font>. Наверное, человек парсит что-то в XML.

   
 
 автор: KreZ0n   (28.02.2008 в 15:12)   письмо автору
 
   для: drozd   (28.02.2008 в 14:37)
 

Нужно программу-парсер писать. А на это нужно время...

   

Сообщения:  [1-10]   [11-13] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования