|
|
|
|
|
для: drozd
(28.02.2008 в 14:37)
| | Может я чего то не догоняю, что мешает менять
<span style="color: red; font-size: 14pt">
| на то что надо?
Не изобретая велосипеда и не городя огорода. (имеется в виду зачем изобретать сложные регулярные выражения). Попалось именно это, заменилось.
ЗЫ. у меня слишком мало опыта в этом.
Поэтому это скорее вопрос чем совет. | |
|
|
|
|
|
|
|
для: 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)
| | прапр | |
|
|
|
|
|
|
|
для: 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;
|
хотя может у меня просто такой перл , поставил новый , но не пробовал пока
// выражение только уже побилось кажется
///// чевоито ищё форум бэкслэши порезал, некоторые | |
|
|
|
|
|
|
|
для: kasmanaft
(28.02.2008 в 17:27)
| | Не люблю я эти пхпшные функции:)
Вот в перле все ясно.
$text =~ /регулярка/моды - сравнение
$text =~ s/что /на что/моды - замена
А тут три тысячи функций и все неудобные) | |
|
|
|
|
|
|
|
для: 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 раза :) | |
|
|
|
|
|
|
|
для: SHAman
(28.02.2008 в 16:57)
| | Торопилсо наверное :))
PS preg_replace() :) | |
|
|
|
|
|
|
|
для: KreZ0n
(28.02.2008 в 15:12)
| | Хорошо как выделить то что внутри ( " " ) и разбить их по ( ; ) | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: drozd
(28.02.2008 в 14:37)
| | Нужно программу-парсер писать. А на это нужно время... | |
|
|
|
|