Цифры в фрагменте "edit\6924" могут быть разные от 1 до 100000000
<div class="edit\5451" style="width:100%; text-align:left">
<div style="padding:0px 25px 0px 25px" align="left" class="edit\9874">
<div class="edit\6924" style="padding:0px 0px 6px 0px">
<div id="result">{RESULT}</div>
Пример выполнения скрипта:
<div class="edit\5451" style="width:100%; text-align:left">
<div style="padding:0px 25px 0px 25px" align="left" class="edit\9874">
<div class="edit\6924" style="padding:0px 0px 6px 0px">
<div id="result">21</div>
Ламаю голову) Может кто поможет.
Спустя 12 минут, 48 секунд (20.01.2011 - 13:48) Winston написал(а):
То есть взять edit\6924 и заменить на
<div id="result">6924</div>
Это имеешь ввиду ?
<div id="result">6924</div>
Это имеешь ввиду ?
Спустя 1 минута, 24 секунды (20.01.2011 - 13:50) Oyeme написал(а):
найти edit/6924 и заменить на {RESULT} суммой цифр 6+9+2+4
то есть заменить на 21.
Сама проблема эта одной функций сделать..
то есть заменить на 21.
Сама проблема эта одной функций сделать..
Спустя 29 минут, 47 секунд (20.01.2011 - 14:19) glock18 написал(а):
там несколько таких классов edit___ - их суммы цифр складывать надо? если да, то я так понимаю, что их может быть сколько угодно?
Спустя 24 минуты, 56 секунд (20.01.2011 - 14:44) Oyeme написал(а):
я так понял только предпоследний див.
Спустя 16 минут, 58 секунд (20.01.2011 - 15:01) glock18 написал(а):
для последнего что-то типа этого:
class="edit\\(\d+)"[^>]*>\s*(?=<div)(?!<div[^>]+class="edit\\\d+").*?({RESULT})
если быть более точным, то надо кормить это preg_replace_callback примерно в таком виде:
(class="edit\\(\d+)"[^>]*>\s*(?=<div)(?!<div[^>]+class="edit\\\d+").*?)({RESULT}) (скобки вокруг всего кроме результата). в функции, которую передаешь как параметр... разберешься в общем, что вернуть и как
class="edit\\(\d+)"[^>]*>\s*(?=<div)(?!<div[^>]+class="edit\\\d+").*?({RESULT})
если быть более точным, то надо кормить это preg_replace_callback примерно в таком виде:
(class="edit\\(\d+)"[^>]*>\s*(?=<div)(?!<div[^>]+class="edit\\\d+").*?)({RESULT}) (скобки вокруг всего кроме результата). в функции, которую передаешь как параметр... разберешься в общем, что вернуть и как
Спустя 16 минут, 19 секунд (20.01.2011 - 15:18) DedMorozzz написал(а):
Верно glock18 говорит, необходимо в прег_реплейс_колбек обрабатывать выбраное число. И возвращать уже сумму.
Если не разберёшься как - напишу.
Если не разберёшься как - напишу.
Спустя 5 минут, 21 секунда (20.01.2011 - 15:23) glock18 написал(а):
DedMorozzz
самое сложное объяснить решил что ли?
самое сложное объяснить решил что ли?
Спустя 1 минута, 16 секунд (20.01.2011 - 15:24) DedMorozzz написал(а):
да я написал, потом смотрю твоя фраза висит. Ну и чуток подправил, раз написал))))
Спустя 3 минуты, 26 секунд (20.01.2011 - 15:28) DedMorozzz написал(а):
$a = '<div class="edit\6924" style="padding:0px 0px 6px 0px"> ';Только сие не конечный вариант. Ибо начало - "исчезает". Там думаю справишься :)
$a = preg_replace_callback('#<div.*?([0-9]+)\"#is',create_function('$arr','
$mass = str_split($arr[1]);
return array_sum($mass);
'),$a);
echo $a;
UPD: немного тупанул. Подправил
Спустя 12 минут, 47 секунд (20.01.2011 - 15:40) DySprozin написал(а):
DedMorozzz
glock18
О да, вы знаете толк в извращениях :Р
glock18
О да, вы знаете толк в извращениях :Р
<?php
$src = '<div class="edit\5451" style="width:100%; text-align:left">
<div style="padding:0px 25px 0px 25px" align="left" class="edit\9874">
<div class="edit\6924" style="padding:0px 0px 6px 0px">
<div id="result">{RESULT}</div> ';
echo preg_replace('#(<div class="edit[\\\])([0-9]+)("[^<]+<div id="result">)([^<]+)(</div>)#mse','"$1$2$3".array_sum(str_split($2))."$5"', $src);
Спустя 15 минут, 26 секунд (20.01.2011 - 15:56) Oyeme написал(а):
Спасибо всем!!
Не ожидал такой помощи от Вас!
Не ожидал такой помощи от Вас!
Спустя 40 минут, 33 секунды (20.01.2011 - 16:36) glock18 написал(а):
DySprozin
Да, я, очевидно, усложнил все Сначала пробовал все выбрать, а после этого, когда выяснилось, что один нужен, не подумал, что все куда проще. Отличное решение!
Да, я, очевидно, усложнил все Сначала пробовал все выбрать, а после этого, когда выяснилось, что один нужен, не подумал, что все куда проще. Отличное решение!
Спустя 7 минут, 2 секунды (20.01.2011 - 16:43) DySprozin написал(а):
*Капризно* я тоооже хачу сообщения оценивать! Это тока эксперты такую фичу имеют, да?))
;;Отличное решение!
пасиб (;
;;Да, я, очевидно, усложнил все
зато с ходу ответил, а мну еще гулил =)
;;Отличное решение!
пасиб (;
;;Да, я, очевидно, усложнил все
зато с ходу ответил, а мну еще гулил =)
Спустя 9 минут, 22 секунды (20.01.2011 - 16:53) DedMorozzz написал(а):
тока зачем $1$2$3.... ? Надо было до искомого, искомое, после искомого. Всего 3
Спустя 3 минуты, 31 секунда (20.01.2011 - 16:56) DySprozin написал(а):
DedMorozzz
согласен
согласен
Спустя 7 минут, 54 секунды (20.01.2011 - 17:04) glock18 написал(а):
DedMorozzz
можно было на один паттерн меньше сделать, но это неважно тут в принципе.
DySprozin
я сначала пробовал одной регуляркой все числа такие выбрать, а не только последнее, Oyeme долго не отвечал на мой вопрос, вот а там мысли уходят в сторону лукэхэдов (look-ahead). потом ответ получил, а уже направление мыслей туда, вот и получилось два лукэхэда лишних
плюс я раньше как-то даже не думал, что параметр replace интерпретируется пыхом по-полной. Oyeme как раз в одну строку и искал решение кстати
можно было на один паттерн меньше сделать, но это неважно тут в принципе.
DySprozin
я сначала пробовал одной регуляркой все числа такие выбрать, а не только последнее, Oyeme долго не отвечал на мой вопрос, вот а там мысли уходят в сторону лукэхэдов (look-ahead). потом ответ получил, а уже направление мыслей туда, вот и получилось два лукэхэда лишних
плюс я раньше как-то даже не думал, что параметр replace интерпретируется пыхом по-полной. Oyeme как раз в одну строку и искал решение кстати
Спустя 6 часов, 33 минуты, 45 секунд (20.01.2011 - 23:38) Oyeme написал(а):
целый оффис решить не мог в одну функицю preg_replace,было куча вариантов..
Спасибо всем.
Спасибо всем.
Спустя 2 минуты, 9 секунд (20.01.2011 - 23:40) DySprozin написал(а):
Oyeme
Кушай с булочкой
Кушай с булочкой