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

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

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

 

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

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

тема: Вывести нужные символы
 
 автор: xexe   (17.05.2006 в 15:15)   письмо автору
 
 

Помогите с рег выр. Есть файл, в котором

[CHAR 0110]
NAME=Player
......тут дальше много строк разных......
[ITEM 01921]
TYPE=2,0,0
....много строк...
.............................
[CHAR 0111]
NAME=Player2
......много строк......
[ITEM 01921]
TYPE=3,0,0
....много строк.....

Нужно вывести все в таком формате
Player = 2 (Player взяли из NAME= , а 2 взяли из TYPE= , который находиться несколькими строчками ниже, но только после строки [ITEM 01921])
Player2 =3(Player взяли из NAME= , а 3 взяли из TYPE= , который находиться несколькими строчками ниже, но только после строки [ITEM 01921])

   
 
 автор: cheops   (18.05.2006 в 12:34)   письмо автору
 
   для: xexe   (17.05.2006 в 15:15)
 

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

   
 
 автор: xexe   (18.05.2006 в 13:18)   письмо автору
 
   для: cheops   (18.05.2006 в 12:34)
 


[CHAR 0110]
NAME=Player
SERIAL=0100012d8
TIMER=0
FLAGS=01000000
HITPOINTS=44

[ITEM 0127]
SERIAL=040010ca8

[ITEM 01921]
SERIAL=0400012d8
TYPE=7,0,0
LAYER=91

[ITEM 0937]
SERIAL=0203102b1
TYPE=2,0,0

[CHAR 0111]
NAME=Player2
SERIAL=0100012a8
TIMER=0
FLAGS=01000000
HITPOINTS=100

[ITEM 0333]
SERIAL=0103402c5
TYPE=1,0,0
FLAGS=01500000

тут может и не встретиться строка [ITEM 01921], тогда пропускаем это имя и смотрим следушее

[CHAR 0110]
NAME=Player3
SERIAL=040009188
TIMER=0
FLAGS=01000000
HITPOINTS=100

[ITEM 0f7b]
SERIAL=04000e916
ATTR=01000
CONT=0400098a7

[ITEM 0f8d]
SERIAL=04000c8b5
AMOUNT=65
ATTR=01000
CONT=0400098a7

[ITEM 0f84]
SERIAL=0400049d4
AMOUNT=35
ATTR=01000
CONT=0400098a7

причем строчек начинающихся на [ITEM почти всегда разное количество

[ITEM 01921]
SERIAL=0400032d8
ID=01f4e
TYPE=91,0,0
ATTR=094
CONT=04829

[ITEM 0e20]
SERIAL=040006293
ID=0e22
TYPE=31

т.е. должно получится следущее
Player = 7
Player3 = 91

   
 
 автор: cheops   (18.05.2006 в 23:25)   письмо автору
 
   для: xexe   (18.05.2006 в 13:18)
 

Можно попробовать поступить следующим образом
<?php
  $contents 
file_get_contents("date.txt");
  
$pattern "|NAME=([^\s]+)[\s].*TYPE=([\d]+)[^\d]|isU";
  
preg_match_all($pattern$contents$out);
  for(
$i 0$i count($out[1]); $i++)
  {
    echo 
$out[1][$i]." = ".$out[2][$i]."<br>";
  }
?> 

   
 
 автор: xexe   (19.05.2006 в 10:24)   письмо автору
 
   для: cheops   (18.05.2006 в 23:25)
 

Спасибо. Только получается скрипт выводит все имена
Player = 7
Player2 = 1 <-- вот это лишнее, т.к нету ниже строчки [ITEM 01921]
Player3 = 91
я добавил такую проверку
$pattern = "|NAME=([^\s]+)[\s].*01921\].*TYPE=([\d]+)[^\d]|isU"; 

только она до конца правильно не работает. Например

[CHAR 0110] 
NAME=Player3 
SERIAL=040009188 
TIMER=0 
FLAGS=01000000 
HITPOINTS=100 

[ITEM 0f7b] 
SERIAL=04000e916 
ATTR=01000 
CONT=0400098a7 
TYPE=11119,0,0    <-- Получается, что берется первый попавшийся TYPE

[ITEM 0f8d] 
SERIAL=04000c8b5 
AMOUNT=65 
ATTR=01000 
CONT=0400098a7 

[ITEM 01921] 
SERIAL=0400032d8 
ID=01f4e 
TYPE=91,0,0 
ATTR=094 
CONT=04829 

должно выйти Player3=91 , а выходит Player3=11119

   
 
 автор: cheops   (19.05.2006 в 23:00)   письмо автору
 
   для: xexe   (19.05.2006 в 10:24)
 

Хм... подумать нужно...

   
 
 автор: xexe   (23.05.2006 в 12:06)   письмо автору
 
   для: cheops   (19.05.2006 в 23:00)
 

HELP

   
Rambler's Top100
вверх

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