|
|
|
| Припустим есть переписка (с вконтакте.ру):
Имя
сообщение
дата
Имя
Сообщение
дата
и т.д. Подскажите как организовать с помощью регулярных выражений следующее:разбить эту переписку по переменным:
Массив А(1)=>имя1
Массив А(2)=>сообщение1
Массив А(3)=> дата1
Массив B(1)=>имя2
Массив B(2)=>сообщение2
Массив B(3)=> дата2
хотя бы скажите что нужно почитать, буду благодарен | |
|
|
|
|
|
|
|
для: Yuraboss
(06.07.2012 в 00:33)
| | В первую очередь нужно получить HTML-код страницы, а потом уже разбирать его при помощи регулярных выражений. Вы хотите автоматически это делать? Тогда придется пройти скриптом авторизацию ВК (возможно у них есть API). | |
|
|
|
|
|
|
|
для: cheops
(06.07.2012 в 06:54)
| | да нет, переписку я копирну и вставлю уже в свой php-файл, то есть через форму ввода присвою переписку переменной, а потом уже буду с этой переменной работать | |
|
|
|
|
|
|
|
для: Yuraboss
(06.07.2012 в 13:40)
| | А не можете такой файл-переписку прикрепить к сообщению, чтобы можно было поэкспериментировать на конкретном примере. | |
|
|
|
|
 448 байт |
|
|
для: cheops
(06.07.2012 в 15:23)
| | прикрепляю кусок переписки ,только надеюсь о результатах экспериментов напишете тут?) | |
|
|
|
|
|
|
|
для: Yuraboss
(06.07.2012 в 17:23)
| | Можно начать через preg_match_all и закончить циклом for, чтоб привести к виду:
Массив А(1)=>имя1
Массив А(2)=>сообщение1
Массив А(3)=> дата1
Массив B(1)=>имя2
Массив B(2)=>сообщение2
Массив B(3)=> дата2
|
$text = "Юлия
Приходить или не грузить? 20.05.12
Юра
приходить и не грузить) 20.05.12
Юлия
Если так, то позже 20.05.12
Юра
будешь сама разбираться? 20.05.12
Юлия
Попытаюсь 20.05.12
Юра
ну если хочешь приходи) 20.05.12
Юлия
Точно? 20.05.12
Юра
да) 20.05.12
Юлия
Ладно, но если только пообещаешь мне во всем разобраться)) 20.05.12
Юра
попытаюсь)_)) 20.05.12
Юлия
Тогда жди, скоро буду) 20.05.12
Юра
жду)";
$num = preg_match_all("#(.+?)\r\n(.+?)([0-9]{2}\.[0-9]{2}\.[0-9]{2})#i",$text,$str);
for($i=0;$i<$num;$i = $i + 2)
{
$massiv_A[] = $str[1][$i]; $massiv_A[] = $str[2][$i]; $massiv_A[] = $str[3][$i]; // Юлия
$massiv_B[] = $str[1][$i+1]; $massiv_B[] = $str[2][$i+1]; $massiv_B[] = $str[3][$i+1]; //Юра
}
print_r($massiv_A);
print_r($massiv_B);
|
Последнее сообщение Юры не запишется в массив. Если бы стояла дата, то записалось бы. Все равно, решаемо через еще одно рег. выражение.
=========================================================================
Но если кроме имени будет стоять еще и фамилия, то никак не получится, т.к регулярка не сможет отличить такое "имя" от самого текста сообщения и еще, потому что такое "имя" стоит вплотную к тексту. | |
|
|
|
|
|
|
|
для: ladan
(07.07.2012 в 20:58)
| | спасибо, что откликнулись, я вот за это время так сделал:
<?
function strips(&$el) {
if (is_array($el))
foreach($el as $k=>$v)
strips($el[$k]);
else $el = stripslashes($el);
}
if (get_magic_quotes_gpc()) {
strips($_GET);
strips($_POST);
strips($_COOKIE);
strips($_REQUEST);
if (isset($_SERVER['PHP_AUTH_USER'])) strips($_SERVER['PHP_AUTH_USER']);
if (isset($_SERVER['PHP_AUTH_PW'])) strips($_SERVER['PHP_AUTH_PW']);
}
if (isset($_POST['st'])) {$string=$_POST['st'];}
preg_match_all("/([Юлия]{4}|[Юра]{3})([.\s\S]*?)([\d][\d][.][\d][\d][.][\d][\d])/", $string,$out);
unset($out[0]);
foreach ($out as $key =>$value)
{foreach ($out[$key] as $key =>$value)
$max=$key ;}
for ($i=0; $i<=$max;$i++)
{$name=$out[1][$i];
$mes= $out[2][$i];
$date=$out[3][$i];
echo("$name - $mes - $date<br>");}
?>
|
| |
|
|
|