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

Форум PHP

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

 

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

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

тема: Распарсить сообщение
 
 автор: sl1p   (16.02.2009 в 23:31)   письмо автору
 
 

Вся надежда на рег. выражения, но вдруг что :) на всякий случай пишу тут.
Уже голову себе сломал никак не могу придумать как сделать следующее.

Есть строка, скажем: "nickName: 2345sdfgfg325445jdghhdj";
Отсюда нужно получить 2 переменные:
<?
$nick
// в строке "nickName";
$msg// в строке "2345sdfgfg325445jdghhdj";

Далее уже шлём юзеру с ником $nick сообщение.

То есть можно поступить следующим образом:
<?
$txt 
"nickName: 2345sdfgfg325445jdghhdj";
preg_match('/^(.+?):\s/'$txt$whom);

Но ник может быть и "nick: Name" - выходит плохо =(

Это так для общего понятия проблемы:)
В общем если есть у кого-то идеи кто сталкивался с таким, возможно при написании чата, будьте добры поделитесь мыслёй :)

  Ответить  
 
 автор: AlexDIXI   (16.02.2009 в 23:38)   письмо автору
 
   для: sl1p   (16.02.2009 в 23:31)
 

не совсем понял Вашу задачу. Вы хотите просто разделить строку на две части, в роли метки выступает : ?

  Ответить  
 
 автор: DEM   (16.02.2009 в 23:38)   письмо автору
 
   для: sl1p   (16.02.2009 в 23:31)
 


<?
$msg 
"Nick: Hello!!!";

$exp explode(":"$msg);
echo 
$exp[0]; //Nick
echo $exp[1// Hello!!!
?>

  Ответить  
 
 автор: Trianon   (17.02.2009 в 00:10)   письмо автору
 
   для: DEM   (16.02.2009 в 23:38)
 

двоеточие может встречаться и в сообщении, и в нике.
Любой ответ будет неверным.

  Ответить  
 
 автор: Дем (в універе)   (17.02.2009 в 12:02)
 
   для: Trianon   (17.02.2009 в 00:10)
 


<? 
$msg 
"Nick: Hello!!!"

$exp explode(":"$msg2); 
echo 
$exp[0]; //Nick 
echo $exp[1// Hello!!! 
?> 


А если поставитть лимит? Ведь в нике чаще всего запрещают такие символы как :

  Ответить  
 
 автор: BinLaden   (17.02.2009 в 14:18)   письмо автору
 
   для: Дем (в універе)   (17.02.2009 в 12:02)
 

Любой ответ будет неверным.

  Ответить  
 
 автор: а-я   (17.02.2009 в 00:07)   письмо автору
 
   для: sl1p   (16.02.2009 в 23:31)
 

для таких целей используют serialize() и unserialize()

или не давайте юзеру писать ":" - или чем Вы там разделяете.

  Ответить  
 
 автор: sl1p   (17.02.2009 в 00:51)   письмо автору
 
   для: а-я   (17.02.2009 в 00:07)
 

не давайте юзеру писать
это самый последний вариант :)

двоеточие как пример, могут быть абсолютно любые обозначения, главное чтобы всё точно повыдёргивать.. Имхо тут без разницы двоеточие, не двоеточие.

  Ответить  
 
 автор: MIchail1982   (17.02.2009 в 01:03)   письмо автору
 
   для: sl1p   (17.02.2009 в 00:51)
 

<?php
$msg 
"Nick: He:llo!!!";
echo 
substr($msg,0,strpos($msg,':'));
echo 
substr($msg,strpos($msg,':')+1);
?>

  Ответить  
 
 автор: sl1p   (17.02.2009 в 01:13)   письмо автору
 
   для: MIchail1982   (17.02.2009 в 01:03)
 

<?php
$msg 
"Nic:k: He:llo!!!";
echo 
substr($msg,0,strpos($msg,':'));
echo 
substr($msg,strpos($msg,':')+1);
?> 

  Ответить  
 
 автор: Drago   (17.02.2009 в 01:43)   письмо автору
 
   для: sl1p   (17.02.2009 в 01:13)
 

Для чего вам нужно получить ник из сообщения? Что вы будете с ним делать?

  Ответить  
 
 автор: MIchail1982   (17.02.2009 в 02:23)   письмо автору
 
   для: sl1p   (17.02.2009 в 01:13)
 

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

  Ответить  
 
 автор: sl1p   (17.02.2009 в 04:21)   письмо автору
 
   для: MIchail1982   (17.02.2009 в 02:23)
 

Нет :)
Я ж говорю готов выслушать любые предложения, главное чтобы можно было распарсить удачно :)
Вообще логически подумать, так сделать просто невозможно если в имени юзверя любой символ.
Всегда недолюбливал места где запрещают или вырезают какието символы)

А взялся за идею ибо видел не раз в каких-то чатах подобный механизм, хотя до конца его не проверил так как об этом тогда не задумывался :)
Возможно там просто идёт проверка на вхождение ника в сообщение, без всяких баз.. тут только гадать :)

  Ответить  
 
 автор: Drago   (17.02.2009 в 07:23)   письмо автору
 
   для: sl1p   (17.02.2009 в 04:21)
 

Если вам нужно просто выделить ник пользователя, если он получает адресованное ему сообщение. То можно обойтись простой заменой.
<?
$msg 
str_replace("$nick:""<b>$nick:</b>"$msg);

  Ответить  
 
 автор: Trianon   (17.02.2009 в 09:11)   письмо автору
 
   для: sl1p   (17.02.2009 в 04:21)
 

В чатах это реализуют не с ником, а с логином.
На логин накладывают довольно жесткие ограничения. (Что с ним вполне оправданно)

Подсветку ников тоже выполняют, но а) сравнивая ник с каждым из списка находящихся в комнате, и б) обычно на стороне клиента

  Ответить  
 
 автор: Zilog   (17.02.2009 в 01:46)   письмо автору
 
   для: sl1p   (16.02.2009 в 23:31)
 

я бы разделял эти вещи на самом раннем этапе. Когда всё это ещё не выглядит слитной строкой. ВОобще, думаю надо плясать как раз с начала - там уже и понятно будет что делать. Может есть список пользователей - можно и пробежаться по нему?

  Ответить  
 
 автор: sl1p   (17.02.2009 в 01:58)   письмо автору
 
   для: Zilog   (17.02.2009 в 01:46)
 

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

  Ответить  
Rambler's Top100
вверх

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