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

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

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

 

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

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

тема: Вставка в строку тегов
 
 автор: romza   (23.01.2006 в 17:09)   письмо автору
 
 

Допустим у меня есть строка:

Я иду шагаю по Москве...

Нужно сделать так, что бы слово "шагаю" находилость в тегах <b></b>, но при этом замены самого слова не происходило...

Подскажите плиз как???

   
 
 автор: Евгений Петров   (23.01.2006 в 17:19)   письмо автору
 
   для: romza   (23.01.2006 в 17:09)
 

Что значит замены слова не происходило?

<?
  $text 
"Я иду шагаю по Москве...";  
  echo 
str_replace("шагаю","<b>шагаю</b>",$text);
?>

Так пойдет?

   
 
 автор: romza   (23.01.2006 в 17:25)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 17:19)
 

Проблема в том что фраза берется из базы, а слова, которые выделяются, задаются пользователем, и не известно, как он напишет... Шагаю или ШАГАЮ или ШаГаЮ. Поэтому нужно что бы замены слова не произоводилось, а слово выводилось так, как оно в базе, только вставлялись теги по краям..... это возможно...???

   
 
 автор: Евгений Петров   (23.01.2006 в 17:29)   письмо автору
 
   для: romza   (23.01.2006 в 17:25)
 

Не очень понятно. Если проблема только в регистре символов, то можно так:
<?
  $text 
"Я иду шАгаЮ по Москве...";
  echo 
preg_replace("/(шагаю)/i","<b>\\1</b>",$text);
?>

   
 
 автор: romza   (23.01.2006 в 17:38)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 17:29)
 

Не могли бы вы пояснить, разве в выше приведенном примере не будет просиходить замены самого слова??? И вообще... эта функция не работает... а зарубает все на корню... к сожалению...

   
 
 автор: Unkind™   (23.01.2006 в 17:59)   письмо автору
 
   для: romza   (23.01.2006 в 17:38)
 

Хотите, чтобы пользователь мог выделять кусок текста? Почему бы не взять пример с этого форума?

   
 
 автор: Евгений Петров   (23.01.2006 в 18:00)   письмо автору
 
   для: romza   (23.01.2006 в 17:38)
 

Что значит заменяет? Что Вам нужно сделать?

   
 
 автор: romza   (23.01.2006 в 18:07)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 18:00)
 

Есть поиск, в котором должны выделятся слова введенные пользователем... но регистр в котором находятся слова в БД не должен изменятся... должны только добавлятся теги для выделения по краям слова..

   
 
 автор: Евгений Петров   (23.01.2006 в 18:09)   письмо автору
 
   для: romza   (23.01.2006 в 18:07)
 

А в моем последнем примере он разве менялся? У меня выводит
Я иду шАгаЮ по Москве...

   
 
 автор: romza   (23.01.2006 в 18:10)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 18:09)
 

Тогда вопрос, у меня почему то не работает функция preg_replace, и что значит "\\1"??? и что делать если у меня вместо известного слова есть переменная, могу я туда поставить вместо "шагаю" что нить типа $ttt где находися слово???

А то склонен уже дуамать что придется все переводить в массивы и сранивать их элементы между собой...

   
 
 автор: XPraptor   (23.01.2006 в 18:18)   письмо автору
 
   для: romza   (23.01.2006 в 18:10)
 

Вам все правильно дали. Переменную можно поставить. Проверьте версию php все работает.

   
 
 автор: romza   (23.01.2006 в 18:23)   письмо автору
 
   для: XPraptor   (23.01.2006 в 18:18)
 

А почему может не работать эта функция вот в такой записи...


$v["e"] = preg_replace("/($exp_asdfa[$i])/i","<b>\\1</b>",$v["e"]);


Или где смотреть что нужно включать????

   
 
 автор: Евгений Петров   (23.01.2006 в 18:30)   письмо автору
 
   для: romza   (23.01.2006 в 18:23)
 

$v["e"] = preg_replace("/(".$exp_asdfa[$i].")/i","<b>\\1</b>",$v["e"]); 

   
 
 автор: Евгений Петров   (23.01.2006 в 18:23)   письмо автору
 
   для: romza   (23.01.2006 в 18:10)
 

могу я туда поставить вместо "шагаю" что нить типа $ttt
Да можете.
А что у вас выводит? Попробуйте вместо \\1 поставить \${1}

   
 
 автор: romza   (23.01.2006 в 18:28)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 18:23)
 

Вообще вывод запарывется, как в первом так и во втором случае (Это я про замену \\1 на \${1), выводит The page cannot be displayed.
ЧТо не так блин товарищи, я тут уже голову сломал...

   
 
 автор: Евгений Петров   (23.01.2006 в 18:29)   письмо автору
 
   для: romza   (23.01.2006 в 18:28)
 

А что у вас за PHP? Ошибка какая то прикольная :)

   
 
 автор: romza   (23.01.2006 в 18:31)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 18:29)
 

У хостеров стоит PHP Version 4.3.11... .... это как???

   
 
 автор: XPraptor   (23.01.2006 в 18:46)   письмо автору
 
   для: romza   (23.01.2006 в 18:31)
 

Да с пхп вроде все в порядке. Версия нужная. А выложите ка в атаче весь код файла, может виднее станет.

   
 
 автор: cheops   (23.01.2006 в 21:46)   письмо автору
 
   для: romza   (23.01.2006 в 18:10)
 

>Тогда вопрос, у меня почему то не работает функция
>preg_replace
Скорее всего не настроена локаль, попробуйте её настроить как это описывается в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=6084

>preg_replace, и что значит "\\1"???
Первые круглые скобки в регулярном выражении

   
 
 автор: Киналь   (23.01.2006 в 22:08)   письмо автору
 
   для: romza   (23.01.2006 в 17:09)
 

Боязно спористь со знатоками, но позволю себе эту вольность=)

Зачем тут регулярные выражения вообще?

<? 
 $search
="шАгАЮ";
  
$text "Я иду шагаю по Москве...";   
  echo 
str_ireplace("$search","<b>$search</b>",$text);  // регистронезависимая замена
?>


Результат:
Я иду шАгАЮ по Москве....

   
 
 автор: Евгений Петров   (23.01.2006 в 22:43)   письмо автору
 
   для: Киналь   (23.01.2006 в 22:08)
 

Потому что в данном случае:
<?
  $search
="шагаю";
  
$text "Я иду ШаГАю по Москве...";
  echo 
str_ireplace("$search","<b>$search</b>",$text);  // регистронезависимая замена
?>

Выведет Я иду шагаю по Москве... а нужно Я иду ШаГАю по Москве...

   
 
 автор: romza   (24.01.2006 в 09:54)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 22:43)
 

Так я же объясняю, в случае применения функций str_ireplace() и str_replace() запарывается вывод... работает почему -то только функция eregi_replace(), но она заменяет слово из базы, на введенное слово пользователем из переменной $search, а мне нужно что бы слово само не заменялось, а по краям обрамлялось какими-либо тегами выделения.

   
 
 автор: Киналь   (24.01.2006 в 09:58)   письмо автору
 
   для: Евгений Петров   (23.01.2006 в 22:43)
 

Странно, у меня выводит именно шАгАЮ. Может. дело в версии РНР? У меня 5.0.2.

   
 
 автор: romza   (24.01.2006 в 10:04)   письмо автору
 
   для: Киналь   (24.01.2006 в 09:58)
 

Код... если что не так, подправте плиз... но выходит замена только если использовать функцию eregi_replace(), почему???


<?PHP

/* Получение поисковой строки GET методом  */
$asdf=$_GET["keywords"];

/* Обрезка пробелов по краям строки*/
$asdf trim($asdf);

/* Получение массива с результатами поиска из файла  */
$arr=$rn["search"]["keywords"];

$asdfa $asdf;

setlocale (LC_ALL, array ('ru_RU.CP1251''rus_RUS.1251'));

$exp_asdfa explode(" "$asdfa);


$rus "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
$rus_to "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";

$engl "abcdefghijklmnopqrstuvwxyz";
$engl_to "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

$asdf strtr ($asdf$rus$rus_to);
$asdf strtr ($asdf$engl$engl_to);

/* Перревод поисковой строки в массив  */
$exp_asdf explode(" "$asdf);

/* Колличестов циклов в массиве выделения искомого слова*/
$quan count($exp_asdf);
--
$quan;


/* Создание цикла для дальнейшей обработки результатов вывода  */
foreach($arr as $v)
{
/* Замена в строке резултатов вывода знаков "(", " )", "/", "," на пробел */
$repl_v $v["e_title"];
$repl_v str_replace("("" "$repl_v);
$repl_v str_replace(")"" "$repl_v);
$repl_v str_replace("/"" "$repl_v);
$repl_v str_replace(","" "$repl_v);

$repl_v strtr ($repl_v$rus$rus_to);
$repl_v strtr ($repl_v$engl$engl_to);

/* Создание массива из строки результата поиска */
$exp_v explode(" "$repl_v);

/* Выборка строки полного соответствия запросу */
$exp_v[ ] = null;
$exp_asdf  array_pad ($exp_asdf count($exp_v), null);

/* Если все поисковые слова присутствуют */
if(count(array_diff($exp_asdf$exp_v)) === 0)
{

/* Замена введенного слова на выделенное */ 
    
for ($i=0$i<count($exp_asdf); $i++)
    {
    
/* Выделение поисковых слов eregi_replace*/
    
$v["e_title"] = eregi_replace($exp_asdfa[$i], "<span style='color: #000000'><b>".$exp_asdfa[$i]."</b></span>"$v["e_title"]);

    if(
$i == $quan)
    {
    
/* Вывод результата поиска */
    
echo '<div style="padding: 7px 0px 10px 0px; border-bottom: 1px dotted #cccccc"><a href="'.$v["href"].'"  target="_blank" style="color:#000000">'.$j.'. '.$v["e_title"].'</a></div>';
    }
    }
/* Увеличение значения счетчика на единицу */
$j++;
}
}

?>

   
 
 автор: romza   (24.01.2006 в 13:50)   письмо автору
 
   для: romza   (24.01.2006 в 10:04)
 

Прошу прощения, str_replace работает, тока она регистрозависима... и выделение не просиходит вообще...

   
 
 автор: romza   (25.01.2006 в 14:09)   письмо автору
 
   для: romza   (24.01.2006 в 13:50)
 

Ну может кто нить подскажет мне... что не так...

   
 
 автор: romza   (26.01.2006 в 15:50)   письмо автору
 
   для: romza   (25.01.2006 в 14:09)
 

Спасибо всем за понимание... :(

   
Rambler's Top100
вверх

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