Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Регулярки, удаление пробелов

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Tox
Отправлено: 23 Июня, 2012 - 12:30:03
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Есть строка:
'любойТекст0 любойТекст1 "Спец Текст0" любойТекст2 "Спец Текст1" ' - ну и так далее
Пробовал str_replace(' ','',$string), но оно удаляет все пробелы, а нужно, чтобы удалялись пробелы только внутри "". С explode тоже самое. Как это можно сделать?


-----
In Console We Trust. Code hard. Or die.
 
 Top
fdr21
Отправлено: 23 Июня, 2012 - 12:48:43
Post Id



Гость


Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012  


Помог: 5 раз(а)




По ходу так)))
PHP:
скопировать код в буфер обмена
  1. $text = 'любойТекст0 любойТекст1 "text texx0" любойТекст2 "Спец Текст1" ';
  2. $text = preg_replace('~("[\w\dА-ЯЁ]+)\s+([\w\dА-ЯЁ]+")~ius', '\1\2', $text);
  3. var_dump($text);
  4. // результат
  5. // string 'любойТекст0 любойТекст1 "texttexx0" любойТекст2 "СпецТекст1" ' (length=100)
  6.  

(Отредактировано автором: 23 Июня, 2012 - 12:53:59)

 
 Top
Tox
Отправлено: 23 Июня, 2012 - 13:22:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




Warning: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Compilation failed: invalid UTF-8 string at offset 8
+ текст в строке включает в себя a-z


-----
In Console We Trust. Code hard. Or die.
 
 Top
fdr21
Отправлено: 23 Июня, 2012 - 14:02:51
Post Id



Гость


Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012  


Помог: 5 раз(а)




если только a-z....
измените шаблон
~("[a-z]+)\s+([a-z]+")~si
Цитата:
Warning: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Compilation failed: invalid UTF-8 string at offset 8

может вам нужно перевести файл скрипта в UTF-8, хотя не совсем уверен почему такая ошибка выходит)

(Отредактировано автором: 23 Июня, 2012 - 14:12:37)

 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Июня, 2012 - 14:04:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




.

(Отредактировано автором: 23 Июня, 2012 - 14:15:07)

 
 Top
Tox
Отправлено: 23 Июня, 2012 - 15:00:59
Post Id



Посетитель


Покинул форум
Сообщений всего: 314
Дата рег-ции: Нояб. 2011  
Откуда: Россия


Помог: 0 раз(а)




я чуть-чуть изменил, все равно не получается:
PHP:
скопировать код в буфер обмена
  1. $text = 'text0 5673 "text1 space text2" " space text3 " " text4 space "';
  2. $text = preg_replace('~("\w\dA-Z+)\s+(\w\dA-Z+")~ius', '\1\2', $text);
  3. var_dump($text);
  4. // результат
  5. //string(62) "text0 5673 "text1 space text2" " space text3 " " text4 space ""
  6.  
  7.  

В чем ошибка?


-----
In Console We Trust. Code hard. Or die.
 
 Top
fdr21
Отправлено: 23 Июня, 2012 - 20:10:24
Post Id



Гость


Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012  


Помог: 5 раз(а)




Цитата:
В чем ошибка?

изменили не так, и потом у вас в строке разное количество слов, для удаление пробелов из текста заключенного в двойные кавычки...
Попробуйте так!
PHP:
скопировать код в буфер обмена
  1. $text = 'text0 5673 "text1 space05 text2" " space text3 " " text4 space "';
  2.         '~"(.*?)"~s',
  3.         create_function(
  4.                 '$matches',
  5.                 'return preg_replace("~\s*~s", "", $matches[0]);'
  6.         ),
  7.         $text
  8. );
  9. var_dump($word);
  10. // результат
  11. // string 'text0 5673 "text1space05text2" "spacetext3" "text4space"' (length=56)

(Отредактировано автором: 23 Июня, 2012 - 20:19:20)

 
 Top
Champion Супермодератор
Отправлено: 23 Июня, 2012 - 21:32:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




А почемму бы циклом не перегнать старую строку в новую писимвльно, считая по дороге кавычки и пропускач пробелы тогда, когда надо? Это, по-моему, самое простое, очевидное и унгиверсальное решение
 
 Top
snikers987
Отправлено: 23 Июня, 2012 - 21:40:31
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




Цитата:
Warning: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Compilation failed: invalid UTF-8 string at offset 8


Указан модификатор для работы с юникодом(u), а строка передаваемая preg_replace() не в юникоде

(Отредактировано автором: 23 Июня, 2012 - 21:40:53)



-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
fdr21
Отправлено: 23 Июня, 2012 - 22:20:46
Post Id



Гость


Покинул форум
Сообщений всего: 86
Дата рег-ции: Июнь 2012  


Помог: 5 раз(а)




Champion пишет:
А почемму бы циклом не перегнать старую строку в новую писимвльно, считая по дороге кавычки и пропускач пробелы тогда, когда надо? Это, по-моему, самое простое, очевидное и унгиверсальное решение

Очень интересно, можете кусок кода предоставить!?))
 
 Top
DlTA
Отправлено: 23 Июня, 2012 - 23:02:48
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




а нужно удалять пробелы в кавычках полностью
или же может быть хватит удаления множественных пробелов?
может хватит варианта
 
 Top
armancho7777777 Супермодератор
Отправлено: 23 Июня, 2012 - 23:57:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $str = 'слово текст02 "10слово  слово  два  слова  и  ещё   текст10" 02слово слово текст';
  3. $str .= 'слово текст12 "11слово  слово  два  слова  и  ещё   текст11" 12слово слово текст';
  4. $str .= 'слово текст22 "12слово  слово  два  слова  и  ещё   текст12" 22слово слово текст';
  5.  
  6.  
  7. function callback($math)
  8. {
  9.         // Заменить последовательность пробелов, переносов строк и т.д. на один пробел
  10.         return $math[1].preg_replace('~[\s]+~', ' ', $math[2]).$math[3];
  11.        
  12.         // ...или же удалить все пробелы, переносы строк и т.д.
  13.         // return $math[1].preg_replace('~[\s]+~', '', $math[2]).$math[3];
  14. }
  15.  
  16. $pattern = "~";
  17. $pattern .= "([\w\W]+\")";   // Части подстрок до открывающих ковычек
  18. $pattern .= "([\w\W]+)";     // Подстроки между ковычками
  19. $pattern .= "(\"[\w\W]+)";   // Части подстрок после закрывающих ковычек
  20. $pattern .= "~Usi";
  21.  
  22. echo preg_replace_callback($pattern, "callback", $str);
  23.  
  24.  


Ну и тоже самое по короче ...

PHP:
скопировать код в буфер обмена
  1.  
  2.                      "~([\w\W]+\")([\w\W]+)(\"[\w\W]+)~Usi",
  3.                      create_function(
  4.                          '$math',
  5.                          'return $math[1].preg_replace("~[\s]+~", "", $math[2]).$math[3];'
  6.                      ),
  7.                      $str
  8.           );
  9.  


DlTA пишет:
может хватит варианта


Заменить 2 пробела на один?
Ну уж тогда заменить все пробелы на один:

или

(Отредактировано автором: 25 Июня, 2012 - 00:46:09)

 
 Top
Champion Супермодератор
Отправлено: 24 Июня, 2012 - 21:38:40
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




fdr21 пишет:
Очень интересно, можете кусок кода предоставить!?))

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $str = 'vnjfh "nkdjbvkf  fngjkbg kfjt" kjbndkfvb "dkjfb  bvkjbgkd  " dfbk';
  3.         $dst = '';
  4.         $inQuotes = 0;
  5.         for($i = 0, $cn = strlen($str); $i < $cn; ++$i) {
  6.                 $inQuotes ^= ($str[$i] === '"');
  7.                 $dst .= ($str[$i] !== ' ' || !$inQuotes) ? $str[$i] : '';
  8.         }
  9.         die($dst);
  10.        
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB