Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: обрамление скобками {}
Форумы портала PHP.SU » PHP » Регулярные выражения » обрамление скобками {}

Страниц (1): [1]
 

1. scuter - 17 Июля, 2008 - 13:45:34 - перейти к сообщению
не как не получается вытащить строку нужным образом,
вот строка,
Цитата:

{blablabla{blablabla{blablabla}blablabla}blablabla{blablabla}blablabla{blablabla}blablabla}

мне надо получить массив
PHP:
скопировать код в буфер обмена
  1.  
  2. array('blablabla{blablabla{blablabla}blablabla}blablabla{blablabla}blablabla{blablabla}blablabla',
  3. 'blablabla{blablabla}blablabla', 'blablabla', 'blablabla');
  4.  

на "blablabla" можете не обращать внимание, это какой то текст.
2. valenok - 17 Июля, 2008 - 15:12:23 - перейти к сообщению
От мельтешения я не совсем разоабрался что именно должно получиться, но похоже это оно:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function vnc($a){return @iconv("UTF-8","WINDOWS-1251",$a);}
  4. function s2h($a)//JSON-string to PHP-hash
  5. {
  6.   $a=urldecode($a);
  7.   $a=stripcslashes(vnc($a));
  8.   $mode=0;//режим символа -- 1->строка  0->не строка
  9.   $res="";
  10.   $p="";//предыдущий символ    
  11.   $i=0;
  12.   for($i=0;$i<strlen($a);$i++)
  13.   {            
  14.     $v=$a{$i};
  15.     if($v=='"')
  16.     {
  17.       if($mode==1 && $p!='\\')$mode=0;else $mode=1;
  18.       $res.=$v;
  19.       $p=$v;
  20.       continue;      
  21.     }            
  22.     if($mode==1)$res.=$v;//строка
  23.     else
  24.     {//управляющие элементы
  25.      if($v=="{") $res.="array(";else
  26.      if($v=="}") $res.=")";else
  27.      if($v==":") $res.="=>";else
  28.      if($v==",") $res.=",";else
  29.      $res.=$v;    
  30.     }        
  31.     $p=$v;      
  32.   }    
  33.   eval('$x='.$res.";");  
  34.   return $x;        
  35. }
3. scuter - 17 Июля, 2008 - 22:47:59 - перейти к сообщению
нет тут преобразование из JSON формата,
а мне нужно,
вытащить из текста строку находящуюся в скобках {},
при этом там может быть вложеность, т.е. внутри одних скобок могут быть другие скобки.
4. valenok - 18 Июля, 2008 - 01:57:46 - перейти к сообщению
Тогда используйте метки начала и конца строки в регулярке

PHP:
скопировать код в буфер обмена
  1. <?
  2. preg_match(/^{(.*)}$/i,$str,$matches);
  3. echo $matches[0];
5. scuter - 18 Июля, 2008 - 19:28:57 - перейти к сообщению
я конечно не специалист по регулярным,
но ^ означает начало строки,
$ означает конец строки,
а мне нужно из такого текста
CODE (text):
скопировать код в буфер обмена
  1. str_1{str_2{str_3}str_4}str_5{str_6}

вытащить такие данные
CODE (text):
скопировать код в буфер обмена
  1. 'str_2{str_3}str_4', 'str_6', 'str_3'

я просто не могу понять как вложеные элементы вытащить.
6. valenok - 18 Июля, 2008 - 19:44:03 - перейти к сообщению
Так чтоб не отдель str_3 , скорее всего идти по строке и считать скобочки по уровням вложения, открыт первый уровень дальше всё в массив, открыт второй уровень. продолжаем в тот же массив, закрыт второй уровень, продолжаем всё в массив, закрыт первый уровень, создаём след элемент массива и по новой.

Только так наверное.
7. 999 - 20 Октября, 2008 - 19:26:41 - перейти к сообщению
лзльшщзовартдлмиьитьрод
(Добавление)
сиськи,пиписьки,яички,хуй,сосочки,лобок!!!
(Добавление)
ой-ой...эт не я
8. Champion - 22 Октября, 2008 - 16:21:35 - перейти к сообщению
999 Больной?
(Добавление)
scuter
preg_match_all('/{[^{]*}/U',$str, $matches);
Хотя это не совсем то

 

Powered by ExBB FM 1.0 RC1