Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1177742676
syte_ser78
2007-04-28 10:44
2007.05.27
подскажите насчет видеокарт


15-1177426962
Kolan
2007-04-24 19:02
2007.05.27
Как по английски &amp;laquo;аппаратно-программный комплекс&amp;raquo;?


15-1177613059
Некроман_тус
2007-04-26 22:44
2007.05.27
Архив...


3-1173306371
databaser
2007-03-08 01:26
2007.05.27
Сравнение запросов


15-1177422667
@!!ex
2007-04-24 17:51
2007.05.27
Client Rect





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский