[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача ро нахождение и замены.
Oyeme
Задача: одной строчкой программного кода используя preg_replace() нужно сделать замену фрагмента {RESULT} на сумму цифр "6924", которая идет в последнем контейнере div после фрагмента edit\.
Цифры в фрагменте "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>
Это имеешь ввиду ?

Спустя 1 минута, 24 секунды (20.01.2011 - 13:50) Oyeme написал(а):
найти edit/6924 и заменить на {RESULT} суммой цифр 6+9+2+4
то есть заменить на 21. wink.gif

Сама проблема эта одной функций сделать..

Спустя 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}) (скобки вокруг всего кроме результата). в функции, которую передаешь как параметр... разберешься в общем, что вернуть и как rolleyes.gif

Спустя 16 минут, 19 секунд (20.01.2011 - 15:18) DedMorozzz написал(а):
Верно glock18 говорит, необходимо в прег_реплейс_колбек обрабатывать выбраное число. И возвращать уже сумму.
Если не разберёшься как - напишу.

Спустя 5 минут, 21 секунда (20.01.2011 - 15:23) glock18 написал(а):
DedMorozzz
laugh.gif laugh.gif самое сложное объяснить решил что ли? biggrin.gif

Спустя 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
О да, вы знаете толк в извращениях :Р

<?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 написал(а):
Спасибо всем!! cool.gif
Не ожидал такой помощи от Вас! happy.gif happy.gif happy.gif

Спустя 40 минут, 33 секунды (20.01.2011 - 16:36) glock18 написал(а):
DySprozin
Да, я, очевидно, усложнил все smile.gif Сначала пробовал все выбрать, а после этого, когда выяснилось, что один нужен, не подумал, что все куда проще. Отличное решение!

Спустя 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
согласен wink.gif

Спустя 7 минут, 54 секунды (20.01.2011 - 17:04) glock18 написал(а):
DedMorozzz
можно было на один паттерн меньше сделать, но это неважно тут в принципе.

DySprozin
я сначала пробовал одной регуляркой все числа такие выбрать, а не только последнее, Oyeme долго не отвечал на мой вопрос, вот а там мысли уходят в сторону лукэхэдов (look-ahead). потом ответ получил, а уже направление мыслей туда, вот и получилось два лукэхэда лишних smile.gif

плюс я раньше как-то даже не думал, что параметр replace интерпретируется пыхом по-полной. Oyeme как раз в одну строку и искал решение кстати smile.gif

Спустя 6 часов, 33 минуты, 45 секунд (20.01.2011 - 23:38) Oyeme написал(а):
целый оффис решить не мог в одну функицю preg_replace,было куча вариантов..
Спасибо всем. wub.gif

Спустя 2 минуты, 9 секунд (20.01.2011 - 23:40) DySprozin написал(а):
Oyeme
Кушай с булочкой tongue.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.