Показать сообщение отдельно

да вы чё хоть...
  #3  
Старый 10.05.2010, 13:33
roxblnfk
Познающий
Регистрация: 07.02.2010
Сообщений: 70
Провел на форуме:
217996

Репутация: 56
Отправить сообщение для roxblnfk с помощью ICQ
Arrow да вы чё хоть...

LStr1ke, не знаю, зачем ты полез в регулярки, это же всё медленнее работает.
Но, если следовать твоим суждениям унифицировать алгоритм под любой разделитель, то проще написать в регулярках.
Допустим. Даже не смотря на кривость того, что если разделитель будет не запятой, то при замене числа на его месте появится именно запятая
Признаюсь, я плохо шарю в регулярках, поэтому, если это твой код, задам тебе вопрос:
из твоей регулярки "#(^\d|\,|^)".$need."(\,|^|^\d)#"
что означает |^ во второй скобке? т.е. неэкранированный символ ^ в начале выбора без дальнейших символов.. (в первой скобке такой вариант чудом помогает убить нужное число в начале строки )
в первых скобках у тебя ^\d для чего? возьми строку $string = "132,1,5,154,32,123,32"; и эта последовательность уничтожит 132
В конце строки число 32 твоим алгоритмом не убивается.

На мой взгляд, регулярки надо использовать только тогда, когда без них никак (т.е. можно, но не выгодно ни по времени коддинга ни по производительности)
Вобщем, вот мой вариант, где разделяющие символы - любые, кроме десятичных цифр, и заменено оно будет на левый разделитель от данного числа
PHP код:
echo substr(preg_replace("/(\D)".intval($need)."(\D)/","\${1}",'®'.$string."\n"),1,-1); 
И опять же, функцию надо будет взять не один раз, т.к. строку $string = "1^5^154^32^32^123^132"; полностью от числел 32 она не очистит за 1 раз
(либо править регулярку на подобные нонсенсы, либо брать функцию дважды, а то и трижды вобщем по циклу через while... но это если число более 3х раз подряд в строке, тут проще разбить на массив)
так на строку $string = "32б1^5-154^32 32,32х32 32=32_32!32й123^132ы32"; нужно применить функцию 4 раза

остался ещё вариант перебора строки по байтам, этого ещё ни кто не предложил хотя самый эффективный метод, имхо

Последний раз редактировалось roxblnfk; 10.05.2010 в 13:37..
 
Ответить с цитированием