|
|
|
| Есть текст, например:
Потребительское кредитование -635 млн фунтов с +223 млн.
|
Нужно выделить в нём числа с минусом и плюсом:
Потребительское кредитование <font color="red">-635</font> млн фунтов с <font color="green">+223</font> млн.
|
Как это сделать?
P.S. Важно! Только если числа не находятся в ссылке, например:
<a href="http...">Потребительское кредитование -635 млн фунтов с +223 млн.</a>
|
| |
|
|
|
|
|
|
|
для: Maxam
(01.09.2009 в 12:57)
| | Можно начать отталкиваться от следующего решения.
<?php
$text = "Потребительское кредитование -635 млн фунтов с +223 млн.";
$pattern = "|\+[\d]+|";
$text = preg_replace($pattern, "<font color=\"green\">\\0</font>", $text);
$pattern = "|\-[\d]+|";
$text = preg_replace($pattern, "<font color=\"red\">\\0</font>", $text);
echo $text;
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(01.09.2009 в 16:14)
| | Спасибо, работает, но почти!
Если циферки не целые (-0,6%, +3,2%...), то число выделяется не полностью. | |
|
|
|
|
|
|
|
для: Maxam
(01.09.2009 в 20:18)
| | если присмотрется к тому что утверждается метесимволами в регулярном выражении
(я-бы написал например так '#[+-]?\d+#' ) , то можно понять что в конце можно
добавить лишь \.?[\d]* , чтобы включилась ещё и точка с последующими цифрами
(или я бы например может быть написал-бы так '#[+-]?\d+(?:\.\d+)?#' )
> числа не находятся в ссылке
тут придётся или проверять наличие после найденного какого-то колличества "не <" символов
за которыми не будет следовать "</a" (но это только если в солдержимом <a></a> не бывает других тегов) или придётся каждый раз проверять не придёт-ли первым "</a", чем "<a" ,в последующих символах
(, которые могут быть размером приличной длинны, и проверяться очень часто сново и снова, если много цифр и мало <a>)
или так-называемый лексический анализ , например вот как рядом
http://softtime.ru/forum/read.php?id_forum=6&id_theme=67547&page=1
, но с анализированием тегов <a> , и воэможно ещё любых всех тегов , если внутри <td colls="5"> не нужно заменять тоже | |
|
|
|
|
|
|
|
для: cheops
(01.09.2009 в 16:14)
| | Да, ещё нюанс. Щас вот попробовал Ваш код, увидел, что есть числа ещё написанные с пробелом:
ОПЕК-11: Производство нефти +335 000 до 26,365 млн
|
В итоге выделяет:
ОПЕК-11: Производство нефти +335 000 до 26,365 млн | |
|
|
|
|
|
|
|
для: Maxam
(01.09.2009 в 20:26)
| | дубль | |
|
|
|
|
|
|
|
для: Maxam
(01.09.2009 в 20:26)
| | , с запятой тоже нужные цифры? или только с точками? | |
|
|
|
|
|
|
|
для: heed
(01.09.2009 в 20:54)
| | Я видел пока только с запятыми, но фиг их знает, может и с точками когда-нибудь напишут... | |
|
|
|
|
|
|
|
для: Maxam
(01.09.2009 в 21:16)
| | у меня только так получилось не выделять цифру где ОПЕК-11
,) при первом рассмотрении
<pre><?
$text=<<<TXT
ОПЕК-11: Производство нефти +335 000 до 26,365 млн
нефтитанкер2 -335 000 000 000 до 26.365.345 тыщ
нефтитанкер-5
нефтитанкер-5.1.
TXT
;
$pattern = '/(?:(?<!\w)[-+]|(?<![-+]))' # плюс-минус
# только если не после слов, или совсем не читать цифру после знака
.'\b(?:\d+(?:[ ,\.](?=\d))?)+/';
# цифры, за которыми могут быть пробелы с точками и запятыми , за которыми опять цифры
preg_match_all($pattern, $text, $out,2);
print_r($out);
?>
|
из нефтитанкер-5.1. совпадёт 1
и вообще позволяется записать вместо 0.9 просто .9 (здесь не предусмотренно) | |
|
|
|
|
|
|
|
для: heed
(01.09.2009 в 23:20)
| | Сделал так:
<?php
$file[$i]=preg_replace('# (\d+),(\d+)%#','<span class="add">\\0</span>',$file [$i]);
$file[$i]=preg_replace('# (\d+),(\d+)#','<span class="add">\\0</span>',$file[$i]);
$file[$i]=preg_replace('#\+(\d+) (\d+)#','<span class="g">\\0</span>',$file[$i]);
$file[$i]=preg_replace('#\+(\d+),(\d+)%#','<span class="g">\\0</span>',$file[$i]);
$file[$i]=preg_replace('#\-(\d+) (\d+)#','<span class="a">\\0</span>',$file[$i]);
$file[$i]=preg_replace('#\-(\d+),(\d+)%#','<span class="a">\\0</span>',$file[$i]);
?>
|
| |
|
|
|
|
|
|
|
для: Maxam
(02.09.2009 в 00:20)
| | то-же самое в трёх выражениях
<?
$file[$i]=preg_replace('# \d+,\d+%?#','<span class="add">\\0</span>',$file [$i]);
$file[$i]=preg_replace('#[+-]\d+,\d+%#','<span class="g">\\0</span>',$file[$i]);
$file[$i]=preg_replace('#[+-]\d+ \d+#','<span class="g">\\0</span>',$file[$i]);
|
// upd
не заметил три разных класса ,
тогда только два первых можно заменить одним | |
|
|
|