Текущий архив: 2007.05.27;
Скачать: CL | DM;
ВнизВопросик по регулярным выражениям. В пхп:) Найти похожие ветки
← →
antonn © (2007-04-29 22:50) [0]уже начал почитывать про регулярные выражения, но понял, что для решения одной заковырки изучать кучу нового материала как то не очень... Есть у меня строка, в ней между тегами [h][/h] находится текст (точнее просто набор букв:)), и мне нужно убрать в этих буквах пробелы. Т.е. вместо [h]f f[/h] получить [h]ff[/h]. Примерно так же хочу и ссылки позже в тегах обрамлять. Но вот с пробелами никак не справлюсь. Теги то я выделяю и их содержимое тоже, а как в них удалить пробелы - не пойму...
$ddd="[d] d d[/d]";
$ddd=eregi_replace("\\[d\\]?(.*)\\[/d\\]?", "|\\1|", $ddd); //палочки просто вместо тегов, чтоб границы видеть
если бы в строке был бы только один блок тегов, я бы сделал, но их может быть много:( В общем, подскажите, пожалуйста, как такое написать (и можно ли вообще).
Я вообще верхнуюю штуку правильно написал? :)
← →
ferr © (2007-04-29 22:56) [1]что-то мне не понятно что у вас там понаписано.
надо заменять "\s+" на "" и всё. + сначала вытащить кусок в котором заменять..
← →
antonn © (2007-04-29 22:59) [2]ну в общем условие такое получается - удалить все пробелы в тексте обрамленного тегами [h] и [/h]. Пример выше я соорудил методом копипаста и научного тыка и он только находит текст м/у тегами:)
← →
McSimm © (2007-04-29 23:31) [3]
> если бы в строке был бы только один блок тегов, я бы сделал,
> но их может быть много:
Все обстоит гораздо сложнее. тэги могут оказаться незакрытыми, вложенными, пересекающимися. Так что поломать голову придется.
Позволю себе дать совет - раз уж все равно с кучей материала придется знакомиться, лучше сразу забыть про ereg и использовать только preg. Они лучше во всех отношених.
← →
Zeqfreed © (2007-04-29 23:43) [4]
<?php
function strip_spaces($a, $b, $c) {
return $a . str_replace(" ", "", $b) . $c;
}
$a = "hello[h]this text contains few spaces[/h]here the spaces are [/h] again";
$b = preg_replace("/(\[h\])(.*)(\[\/h\])/ie", "strip_spaces("$1", "$2", "$3")", $a);
print "$a = " . $a . "<br/>\n";
print "$b = " . $b . "<br/>\n";
?>
← →
antonn © (2007-04-29 23:50) [5]McSimm, да я так и понял, что preg интересней...
Zeqfreed, Спасибо!
я немного накопипастил, похоже на правду?function callback($data){
$data[0]=preg_replace("/(\s)/","",$data[0]);
return $data[0];
}
$ddd=preg_replace_callback("#\[h\](.*?)\[/h\]#si", "callback", $ddd);
← →
Zeqfreed © (2007-04-30 00:27) [6]Не знаю зачем столько сложностей :) Ну если работает, то похоже ;)
← →
antonn © (2007-04-30 14:41) [7]кстати говоря, код в [4] все таки рубает пробелы и между блоками тегов... придется поверить в правильность своего кода и его использовать (честно - сам не пойму, как оно работает:)), он хоть не рубает вне тегов...
← →
McSimm © (2007-04-30 14:59) [8]
> все таки рубает пробелы и между блоками тегов
* по умолчанию работает в жадном режиме, чтобы выключить, надо использовать (.*?)
← →
antonn © (2007-04-30 15:02) [9]хм... чувствую себя балбесом:)
← →
McSimm © (2007-04-30 15:10) [10]это просто.
в строке "AbcAdeA" шаблон /A(.*)A/ захватит строку целиком, т.е. "жадно", вопросительный знак после квантификатора выключает жадность, т.е. (.*?) захватит "AbcA"
← →
antonn © (2007-04-30 15:16) [11]ну да, это я уже понял:)
кстати, где то видел ссылку в тегах [img][/img], которая скушала последний блок... тут подсветка по словам идет? можно проверять, есть ли в слове "[img" и не подсвечивать, тогда и тег заработает:) Примерно для этих целей нужно было избавиться от пробелов, чтобы [img] и [/img] попали в одно слово со ссылкой...
Страницы: 1 вся ветка
Текущий архив: 2007.05.27;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.043 c