Регулярки на пхп

A
На сайте с 06.07.2009
Offline
33
#61

bearman, спасибо Вам. Отличный вариант. а то с регуляркой действительно замучился.

Замена кавычек на елочки в html по bearman'у:


<?
$text = '<a href="текст" class="текст">"текст"</a>

<p>еще какие то "кавычки "</p>';
$text = preg_replace_callback("#>(.*?)<#sm",'replace_quotes',$text);

die($text);

function replace_quotes($m)
{
$m = $m[1];
$m = preg_replace('#"(\S)#','&laquo;$1',$m);
$m = preg_replace('#(\S\s*)"#','$1&raquo;',$m);

return '>'.$m."<";
}

Еще раз спасибо!

[Удален]
#62

addvert, могу добавить, что

$m = preg_replace('#"(\S)#','&laquo;$1',$m);
$m = preg_replace('#(\S\s*)"#','$1&raquo;',$m)

можно оптимизировать заменой на поиск функциями для работы со строками, но сейчас мне некогда заниматься этим)

Polimer
На сайте с 01.09.2006
Offline
84
#63

Можно, наверное, еще немного оптимизировать:


$search = array (
'#"(\S)#',
'#(\S\s*)"#'
);
$replace = array (
'&laquo;$1',
'$1&raquo;'
);
$m = preg_replace($search, $replace, $m);
Программные решения для бизнеса. (http://frontsoft.ru/) На заказ. Дорого.
[Удален]
#64

Polimer, а можно на стрпозах написать ага? :)

Polimer
На сайте с 01.09.2006
Offline
84
#65

Можно, ага. Но потом сравнить таки производительность, ибо не всегда строковые операции оказываются быстрее регулярок. Но сравнивать влом :)

[Удален]
#66
Polimer:
Можно, ага. Но потом сравнить таки производительность, ибо не всегда строковые операции оказываются быстрее регулярок. Но сравнивать влом :)

ну ....я думаю что уверен что строковые функции быстрее регулярок. вопрос тут в другом - в обхемах обрабатываемых данных + в сложности анализа, тогда да, регулярка может выиграть я уверен, если она написана хорошо, но выполняет сложную работу. просто на строковых функциях сложно повторить некоторые алгоритмы без потери скорости)

chemax
На сайте с 07.01.2009
Offline
206
#67

дайте ссыль прочитать о шаблонах к регуляркам) а то кажется я где то ошибся в жизни, вырезая каждую ссыль)

Качественный хостинг, VPS и сервера. (http://ihc.ru/?ref=569)
[Удален]
#68
chemax:
дайте ссыль прочитать о шаблонах к регуляркам) а то кажется я где то ошибся в жизни, вырезая каждую ссыль)

php.net/preg

Polimer
На сайте с 01.09.2006
Offline
84
#69
bearman:
на строковых функциях сложно повторить некоторые алгоритмы без потери скорости

Можно. Но железо может оказаться дешевле затраченного времени на написание такой байды )

  $pos = 0;

while (FALSE !== ($pos = strpos($m, '"', $pos))) {
$m = substr_replace($m,
(isset($m[$pos+1]) && ctype_graph($m[$pos+1]) || $pos == 0)
? '&laquo;'
: '&raquo;',
$pos, 1);
$pos += 6;
}
[Удален]
#70

Polimer, это уже другой разговор :))))

допишите в прошлую функцию и можно будет опубликовать где то :)))

bearman добавил 25.07.2009 в 13:33

кстати можно в регулярку добавить нечто вида

>[^<]+?".*?<

чтобы обрабатывть только куски заведомо содержащие минимум одну кавычку, зачем впустую т оработать ?)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий