Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

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

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

 

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

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

тема: замена спец символов
 
 автор: P@Sol   (09.09.2005 в 17:13)   письмо автору
 
 

надо в $text все спец символы заменить на "_", но почему то у меня не работает:(


 $text = "[под] землей";
 $text = ereg_replace ("[_\.,?!\[\](){}]+","_",$text);

   
 
 автор: Artem S.   (09.09.2005 в 18:08)   письмо автору
 
   для: P@Sol   (09.09.2005 в 17:13)
 

Странно, но у меня тоже не заработал. Переписал так:

<?php
$text 
"[под] землей";
$text preg_replace("/[_\.,?!\[\](){}]/","_",$text);

echo 
$text;

?>

   
 
 автор: P@Sol   (14.09.2005 в 15:06)   письмо автору
 
   для: Artem S.   (09.09.2005 в 18:08)
 

так ясно...а как сделать так: заменить на "_" все, что не буквы и не цыфры?

   
 
 автор: P@Sol   (14.09.2005 в 15:37)   письмо автору
 
   для: P@Sol   (14.09.2005 в 15:06)
 


<?
   $text 
preg_replace("/[^0-9a-zA-Z\-\xC0-\xFF&ёЁ]+/"""$text);
   
$text preg_replace("/[\-_]+/""-"$text);
   
$text preg_replace("/-+$/"""$text);

нашел такой код (из "[ под ] * & # --- п+п-землей" получил "под-пп-землей")...не могли бы объяснить что тут происходит?

   
 
 автор: Евгений Петров   (14.09.2005 в 16:13)   письмо автору
 
   для: P@Sol   (14.09.2005 в 15:37)
 

Попробуй мой код:
<?
  $text 
=  preg_replace("/[_\.,\?!\[\]\(\){}]+/i","_",$text);
?>

   
 
 автор: P@Sol   (14.09.2005 в 16:22)   письмо автору
 
   для: Евгений Петров   (14.09.2005 в 16:13)
 

не все символы перечислил:) еще есть #%$^&*@

   
 
 автор: Artem S.   (14.09.2005 в 16:16)   письмо автору
 
   для: P@Sol   (14.09.2005 в 15:37)
 

выражением $text = preg_replace("/[^0-9a-zA-Z\-\xC0-\xFF&ёЁ]+/", "", $text); вы удалили все спец. символы. Что не ясно?

   
 
 автор: P@Sol   (14.09.2005 в 16:17)   письмо автору
 
   для: Artem S.   (14.09.2005 в 16:16)
 

-\xC0-\xFF&ёЁ - что это такое??
и что происходит во второй и третьей строке?

   
 
 автор: P@Sol   (14.09.2005 в 16:19)   письмо автору
 
   для: P@Sol   (14.09.2005 в 16:17)
 

в третьей строке: если "-" в конце строки то его удалить. правильно я понял?

   
 
 автор: Евгений Петров   (14.09.2005 в 16:22)   письмо автору
 
   для: P@Sol   (14.09.2005 в 16:19)
 

Да причем если этих "-" будет один и больше то они удалятся все.

   
 
 автор: P@Sol   (14.09.2005 в 16:24)   письмо автору
 
   для: Евгений Петров   (14.09.2005 в 16:22)
 

а где это сказано? (про то что если их 5, то они удалятся?)

по логике если из 5 удалить один последний, то 4-ый символ станет последним и удалится и т.д.:) но может это еще и в коде отмечено?

   
 
 автор: Евгений Петров   (14.09.2005 в 16:29)   письмо автору
 
   для: P@Sol   (14.09.2005 в 16:24)
 

Логика у тебя железная. :) Просто там в конце после "-" стоит плюс который показывает что таких совпадений может быть один и более.

   
 
 автор: Artem S.   (14.09.2005 в 16:26)   письмо автору
 
   для: P@Sol   (14.09.2005 в 16:19)
 

>> -\xC0-\xFF&ёЁ - что это такое??
Это закодированные русские буквы. Любой символ имеет 16 код. Это он и есть
>> и что происходит во второй и третьей строке?
$text = preg_replace("/[\-_]+/", "-", $text)
Полседовательность из подчеркиваний, слеша и тире заменяется на один символ тире
$text = preg_replace("/-+$/", "", $text);
Последовательность из тире в конце строки удаляется.

Смысла в двух последний выражений я не вижу.

   
 
 автор: P@Sol   (14.09.2005 в 16:33)   письмо автору
 
   для: Artem S.   (14.09.2005 в 16:26)
 

если есть фраза "Я готов!" и из нее получить "я-готов", а не "я-готов-".

а вторую строку я сам пока не понял...

Добавлено
вторая строка, наверно чтобы "---" не было:)

   
 
 автор: Artem S.   (14.09.2005 в 16:11)   письмо автору
 
   для: P@Sol   (14.09.2005 в 15:06)
 

Ответ на первый вопрос

<?php
$text 
preg_replace("/[^A-Za-zА-Яа-я0-9]/","_",$text);
echo 
$text;
?> 

   
 
 автор: P@Sol   (14.09.2005 в 16:44)   письмо автору
 
   для: P@Sol   (09.09.2005 в 17:13)
 

заменил

$text = preg_replace("/[^0-9a-zA-Z\-\xC0-\xFF&ёЁ]+/", "", $text); 


$text = preg_replace("/[^A-Za-zА-Яа-я0-9]+/","",$text); 

работать перестало

   
 
 автор: Евгений Петров   (14.09.2005 в 17:29)   письмо автору
 
   для: P@Sol   (14.09.2005 в 16:44)
 

А что не работает? У меня вроде работает, попробуй:
<?
  $text 
preg_replace("/[^ a-zа-я0-9]+/i","",$text);
?>

   
Rambler's Top100
вверх

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