Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Супер explode через regexp


Автор: Elfet 6.4.2005, 20:55
Нужно собрать массив из
Цитата
строка1 "это строка 2" стр3 стр4 "стр 5"

Код
строка1
это строка 2
стр3
стр4
стр 5

Разделитель - один пробел smile

smile

Прошу прощения не смог найти и сам тоже не смог smile smile

Автор: Mal Hack 6.4.2005, 21:01
preg_split smile

Автор: S.A.P. 6.4.2005, 21:05
Mal Hack а строку в кавычках возьмет? smile

Автор: Mal Hack 6.4.2005, 21:20
А почему нет-то.. Надо просто рэг сделать, а щас голова не варит. Пока вот такой вариант:
Код
$str = 'строка1 "это строка 2" стр3 стр4 "стр 5"';
preg_match_all( "#(?:[\w\d]+|(?:(\"|\')[\w\d\s]+\\1))#i" , $str , $matches );
print(implode("<br>",$matches[0]));

Автор: Elfet 7.4.2005, 11:59
Mal Hack, что то странно этот твой код работает smile

Автор: Mal Hack 7.4.2005, 12:00
Цитата(Elfet @ 7.4.2005, 12:59)
Mal Hack, что то странно этот твой код работает smile

В плане? Поясни.

Автор: Ринат 7.4.2005, 16:53
как вариант каждую строку объявляем переменной, потом compact (), но проще граммотный рег написать наверное, хотя значениями переменных могут быть и массивы
курим ман (вместе)
Добавлено @ 16:53
http://ru2.php.net/manual/ru/function.compact.php

Автор: Elfet 7.4.2005, 19:34
Цитата(Mal @ 7.4.2005, 13:00)
В плане? Поясни.

Всмысле все в порядке smile Это я просто ошибся smile

Цитата
граммотный рег написать

а вот это у меня никак и не удаётся smile smile

Автор: Mal Hack 7.4.2005, 20:07
Цитата(Elfet @ 7.4.2005, 20:34)
Всмысле все в порядке smile Это я просто ошибся smile

Ну дык пользуйся наздоровье smile

Автор: Elfet 7.4.2005, 20:20
Цитата(Mal @ 7.4.2005, 21:07)
Ну дык пользуйся наздоровье

угу спасибо! smile


Всё же мне хочется сделат через регехр полностью smile

Автор: Mal Hack 7.4.2005, 21:55
Цитата(Elfet @ 7.4.2005, 21:20)
Всё же мне хочется сделат через регехр полностью smile

preg-split не получится.
Почему: гнадо в паттерне указывать ", а следовательно при разбивке они будут теряться.
так что только preg_match_all, который разбивает на массив.

Автор: Elfet 8.4.2005, 07:51
Цитата(Mal @ 7.4.2005, 22:55)
гнадо в паттерне указывать ", а следовательно при разбивке они будут теряться.

так я их и так удаляю smile мне они совсем ни к чему smile

Автор: Mal Hack 8.4.2005, 11:26
Все равно не получится. Ты в прег-сплите указываешь разделитель, при этом ты не можешь указать интервал для этого разделителя, т.е. чтобы не рассматривать пробелы внутри ". Юзай preg_match %) тоже самое smile

Автор: Elfet 8.4.2005, 14:44
ладно так и быть smile

Автор: Elfet 10.4.2005, 19:46
Вот сделал, правда не через регеп smile может пригодится кому -
Код

<pre>
<?php

$str = 'ñòðîêà1 "ýòî ñòðîêà 2" ñòð3 ñòð4 "ñòð 5"';

$arr=array();
$karr=0;
$inkav=false;
for( $i=0; $i<strlen($str); $i++ )
{
 if($str[$i] != "\"")
 {
  if(!$inkav)
  {
   if($str[$i] != " ")
   {
    @$arr[$karr] .= $str[$i];
   }
   else
   {
    $karr++;
   }
  }
  else
  {
   @$arr[$karr] .= $str[$i];
  }
 }
 else
 {
  if(!$inkav)
  $inkav=true;
  else
  $inkav=false;
 }
}

print_r($arr);
?>

Автор: Mal Hack 10.4.2005, 20:06
Изврат smile

Автор: IZ@TOP 10.4.2005, 20:19
Цитата(Mal @ 10.4.2005, 21:06)
Изврат 


Mal Hack, поддерживаю.

Автор: Elfet 11.4.2005, 12:37
Mal Hack
IZ@TOP
И это чем же? smile Это ж самое наибыстрое?

Автор: Mal Hack 11.4.2005, 13:04
Цитата(Elfet @ 11.4.2005, 13:37)
И это чем же?

Кодом. 15 строк вместо 1.

Цитата(Elfet @ 11.4.2005, 13:37)
Это ж самое наибыстрое?

Проверял? Разница в тысячну доли секунды это не быстрее. А я уверен, что твой код будет дольше выполняться, нежели 1 прег_матч

Автор: Elfet 11.4.2005, 21:04
Цитата(Mal @ 11.4.2005, 14:04)
Проверял? Разница в тысячну доли секунды это не быстрее. А я уверен, что твой код будет дольше выполняться, нежели 1 прег_матч

За самим прег_матчем скрывается более длинная строчка, чем мои 15 smile smile

Автор: Mal Hack 11.4.2005, 21:19
Цитата(Elfet @ 11.4.2005, 22:04)
За самим прег_матчем скрывается более длинная строчка, чем мои 15

но она не парсится PHP, а каботает внутри него !!

Автор: IZ@TOP 12.4.2005, 11:02
Elfet, я уверен что в моем преге условий не больше чем 10. Кстате, кто его потер? smile

Автор: Elfet 12.4.2005, 18:40
Цитата(IZ @ 12.4.2005, 12:02)
Elfet, я уверен что в моем преге условий не больше чем 10. Кстате, кто его потер? 

да что за прег от ИЗАТОПА? smile Я его не видел smile

Автор: IZ@TOP 12.4.2005, 22:51
Elfet, да, его кто-то потер... сейчас нарисую:

Код

preg_match("|^([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$|", $IP, $M);
if($M[1] > 255 or $M[2] > 255 or $M[3] > 255 or $M > 254) {
    echo "bad ip";
} else {
    echo "ip valid";
}


Что то в этом роде...

Автор: Mal Hack 12.4.2005, 22:55
IZ@TOP smile а ты темы попутал по ходу smile
IP это InfMag тему создавал smile
smile

Автор: IZ@TOP 12.4.2005, 22:57
Mal Hack, да... чего-то гдюкануло видимо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)