Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: удаление комментариев
 
 автор: jonnik   (11.07.2006 в 15:36)   письмо автору
 
 

как удалить все комментарии из файла, т.е. // и /* */ . И вопрос вдогонку как удалить символ переноса строки, т.е. чтобы текст шел "сплошняком"

   
 
 автор: WebTech   (11.07.2006 в 16:37)   письмо автору
 
   для: jonnik   (11.07.2006 в 15:36)
 

>как удалить все комментарии из файла, т.е. // и /* */ .

$text = preg_replace("%//(.*)(\n|\r\n)%", "", $text);


$text = preg_replace("%/*(.*)*/%", "", $text);


>как удалить символ переноса строки, т.е.
>чтобы текст шел "сплошняком"

$text = substr_replace("\n", "", $text);

   
 
 автор: JonNik   (11.07.2006 в 17:34)   письмо автору
 
   для: WebTech   (11.07.2006 в 16:37)
 

/*тектс для
удаления */
не удаляет, а :

$text = substr_replace("\n", "", $text); 

вообще все удаляет :(

   
 
 автор: WebTech   (11.07.2006 в 17:54)   письмо автору
 
   для: JonNik   (11.07.2006 в 17:34)
 

Прошу прощения, забыл заэкранировать звездочку. Надо так

$text = preg_replace("%/\*(.*)\*/%", "", $text);


А про перевод строки уточните. Файл, где нужно убрать переводы строк - это html или простой файл? Если простой текстовый файл, то какая у вас ОС?

   
 
 автор: JonNik   (12.07.2006 в 10:16)   письмо автору
 
   для: WebTech   (11.07.2006 в 17:54)
 

Все равно не помогает :( прикрепляю тестовый файл, а вот код который использую:

<?php
  $text 
file_get_contents("m1.php");
  
$fd fopen("m1.php""w");
  
$text preg_replace("%//(.*)(\n|\r\n)%"""$text);
  
$text preg_replace("%/\*(.*)\*/%"""$text);
  
//$text = substr_replace("\n", "", $text);
  
fwrite($fd$text);
  
fclose($fd);
?>

скрипт запускаю на удаленном хостинге под никсами...

   
 
 автор: WebTech   (15.07.2006 в 17:22)   письмо автору
 
   для: JonNik   (12.07.2006 в 10:16)
 

Попробуйте так. Измените сроку на

$text = preg_replace("%//(.*)\n|(\r\n)%", "", $text);

   
 
 автор: jonnik   (17.07.2006 в 10:44)   письмо автору
 
   для: WebTech   (15.07.2006 в 17:22)
 

все равно нет
/* dsdsd
dsdsdsds*/
не удаляет

   
 
 автор: arto   (19.07.2006 в 01:20)   письмо автору
 
   для: jonnik   (17.07.2006 в 10:44)
 

DB<1> $a = "test1\ntest2\t// test3\ntest4 /* test5 \n\ttest6 */"
DB<2> $a =~ s#(?:/\*.*?\*/|(?s)//.*?$)##gsm
DB<3> p $a
test1
test2
test4

   
 
 автор: JonNik   (19.07.2006 в 10:52)   письмо автору
 
   для: arto   (19.07.2006 в 01:20)
 

честно говоря ничего не понял :(

   
 
 автор: WebTech   (19.07.2006 в 15:20)   письмо автору
 
   для: JonNik   (19.07.2006 в 10:52)
 

-

   
 
 автор: Vitas   (19.07.2006 в 17:54)   письмо автору
 
   для: WebTech   (19.07.2006 в 15:20)
 

Удаление комментариев:

$text = preg_replace("%/\*(.*?)\*/%s", "", $text); 

Забыли модификатор s.

Удаление переводов строк:

$text = str_replace (array ("\r", "\n"), "", $text);

   
 
 автор: JonNik   (20.07.2006 в 11:12)   письмо автору
 
   для: Vitas   (19.07.2006 в 17:54)
 

Спасибо !!!
конечный результат таков:

<?php
  
// удаляет однострочные комменты
  
$text preg_replace("%//(.*)(\n|\r\n)%"""$text);
  
// удаляет многострочные комменты
  
$text preg_replace("%/\*(.*?)\*/%s"""$text);
?>

   
 
 автор: beng-beng   (30.07.2006 в 02:13)   письмо автору
 
   для: Vitas   (19.07.2006 в 17:54)
 

Можете расшифровать участок в регулярном выражении

.*?

   
 
 автор: cheops   (30.07.2006 в 11:38)   письмо автору
 
   для: beng-beng   (30.07.2006 в 02:13)
 

Любое число (в том числе и 0) любых символов .*, однако с инвертацией жадности .*? Дело в том, что регулярные выражения по умолчанию жадные, т.е. стремятся найти как можно более длинное соответствие (понятно, что просто .* будет соответствовать всей строке). Символ ? после .* и .+ позволяет сделать регулярные выражения не жадными, т.е. искать как можно менее длинное соответствие.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования