- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
function SplitStr($V){
$ab=explode(' ',$V);
$V='';
foreach($ab as $a){
$a=substr($a,0,50).' '.substr($a,50,50).' '.substr($a,100,50).' '.substr($a,150,50).' '.substr($a,200,50).' '.substr($a,250,50).' '.substr($a,300,50).' '.substr($a,350,50);
$V.=$a.' ';
}
while(strpos($V, " ")){
$V = str_replace(" ", " ", $V);
}
return $V;
}
$V = str_replace(" ", " ", $V);
}
Удивительно что автор в данном куске не реализовал заново strpos и str_replace =)
Было бы крутое месиво из циклов.
строка 5 - заменяется обычным фором, например
это ИМХО нормальный код - и тому есть причины
while(strpos($V, " ")){
$V = str_replace(" ", " ", $V);
}
1. скорость ниже
2. неочевидны с первого взгяда
Вывод: там где можно просто обойтись без регулярки - лучше так и сделать.
>>>чудовищное использование
постились на данном ресурсе коды одного автора, который все делал через регэкспы 0_o. я имел ввиду их.
Вы когда нибудь видели PHP приложение, которое тормозит изза регулярок?
>>2. неочевидны с первого взгяда
Кому как. Тем, кто читал "mastering regular expressions" -- все совершенно очевидно.
тут важно не что где тормозит, а вопрос скорости
Что быстрей регулярки или строковые функции?
Вот например когда регэксп компилированый, то он может оказатся быстрее.
Но простота кода , легкость написания и маленький размер программы чаще важнее..
Мне трудно представить себе задачу на php, где скорость регулярки была бы узким местом.
Узкое место это такое место, которое занимает более 20% времени выполнения.
Оптимизировать нужно только это место.
Иными словами -- нельзя говорить что что-то тормозит, если оно занимает например 2% времени выполнения.
Я говорю о том, что в простых случаях, без регэкспов можно обойтись.
>>>Но простота кода , легкость написания
занчит такое крайне трудно и весьма непросто написать ))
for(i=0;i<351;i+=50)
$b.=substr($a,i,50).' '
и спрашиваю - "Что быстрей регэкс или строковые функции?" возможно их использование в таких случаях имеет смысл
Во-вторых, мне кажется, что регэксп проще чем explode с последующим циклом.
0_о - цикл сложен в написании?
preg_replace("/(\S{{$len}})/", "\${1} ",$string);
for(i=0;i<351;i+=len)$b.=substr($a,i,len ).' ';
Кэп подсказывает, что цикл короче
Кроме того, кэп подсказывает, что Вы забыли strsplit.
это для наглядности
да забыл. если регэксп быстрее имеет смысл использовать его.
выходит пых имеет настолько говеные строковые ф-ции, что их уделывают регэкспы?
>>>Мне трудно представить себе задачу на php, где скорость регулярки была бы узким местом.>>>Узкое место это такое место, которое занимает более 20% времени выполнения.
рекомендую заглянуть сюда
http://swtch.com/~rsc/regexp/regexp1.html
перед
экспоненциальной сложностью ниче не устоит MWA-HA-HA
или в пыхе регэксп быстрее substr?
Возможно, дел в каких-то оптимизациях в PHP.
2. По-моему, гораздо очевидней. Тот, кто пишет на этом языке ИМХО должен знать регэкспы хотя бы на базовом уровне.
Вот чем вам обычный фор не угодил. надо будет поставить вместо 50 - переменную - регулярка засрется еще больше.
а когда понадобится еще что-нить делать в цикле - вы потрете регулярку и напишите фор.
preg_replace("/(\S{{$length}})/", "\${1} ", $string); - вот с переменной длиной
Есть, и эта функция - preg_replace :)
И как оно может заменить регулярки или включить их для >64k — я что-то не вижу.
http://en.wikipedia.org/wiki/Lexical_analysis
Впринципе, регулярки внутри тоже конечные автоматы.
PHP не лучший язык для написания такого, но тоже можно.
0. Упирается в регулярные выражения, об ограничениях которых выше.
1. К обсуждаемому вопросу имеет слабое отношение. Примерно такое: теория описывает, что нужно сделать, а спор о регулярках супротив велосипедов — как.
2. Лично мне в простой задаче сделать несколько замен и подсчитать их количество — малость излишня. Я ж не компилятор пишу, а простой плагин разбивки большого текста на страницы.
Вы просили объяснить -- какое отношение конечные автоматы имеют к работе с текстом -- я привел ссылку.
Если Вам надо разбить слова и посчитать их кол-во, то машина может идти по тексту, увеличивая счетчик каждый раз, когда кончается слово, или сохранять это слово в массив, если оно ему нужно итд
2. Мне сказали о state machine.
3. Я спросил, что это...
И далее по тексту.
Хорошо, я понял, мне подкинули полезную теорию не по теме топика. А минуснули вообще от фонаря.
К сожалению не спасет, да
может, речь о размере самой регулярки?