Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какими методами можно распарсить .txt ? при помощи меток 
:(
    Опции темы
Jiffi
Дата 22.10.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Здравствуйте.

Какими методами можно распарсить .txt ?

Например:

Код

@метка1@ Заголовок @/метка1@
@метка1@
Текст Текст Текст Текст Текст 
Текст Текст Текст 
Текст Текст Текст Текст 
Текст Текст 
Текст 
Текст Текст Текст 
Текст Текст Текст Текст Текст Текст 
@/метка1@

и т.д.
PM MAIL   Вверх
gta4kv
Дата 22.10.2010, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Walking around mad.
***


Профиль
Группа: Завсегдатай
Сообщений: 1868
Регистрация: 25.7.2006

Репутация: 21
Всего: 91



Прочитать файл и распарсить регуляркой.
PM MAIL   Вверх
skyboy
Дата 22.10.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



весь файл целиком парсить регулярками - довольно ресурсоемкое занятие при теговой разметке(в данном случае речь идет как раз о таком).
можно читать построчно + выделять очередной тег при помощи регулярки + фиксировать глубину вложенности при помощи стека уже обработанных тегов.
тебе надо дерево собрать?
можно тупо в тексте заменить "@" на < и >, чтоб получилась потенциально корректная XML-структура и распарсить полученный текст средствами работы с XML. пожалуй, это даже рациональнее самописного парсера.
PM MAIL   Вверх
Тигер
Дата 23.10.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



skyboy, 
регулярки поддерживают рекурсию =)
PM MAIL   Вверх
skyboy
Дата 24.10.2010, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



Цитата(Тигер @  23.10.2010,  21:45 Найти цитируемый пост)
регулярки поддерживают рекурсию =) 

хм. что-то я не представляю. как при помощи одной регулярки, пусть даже и рекурсивной, вычленить все узлы и их вложенность - построить дерево. Можно пример, пусть даже самый примитивнейший и "не проверял, работает ли"?
PM MAIL   Вверх
Тигер
Дата 24.10.2010, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



skyboy, 
дерево регулярки не строят. но вот выбрать найти дерево вполне могут
PM MAIL   Вверх
ksnk
Дата 24.10.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Тигер, Я встречал регулярку, с помощью которой можно проверить правильность скобочной структуры. К сожалению у нее ограничение - только одна пара тегов (отрывающие-закрывающие теги- скобки, вероятно даже односимвольные...) Для нескольких разных тегов регулярку я не видел. Есть пример?

Это сообщение отредактировал(а) ksnk - 24.10.2010, 10:49


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Тигер
Дата 24.10.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



всмысле для нескольких? не понял что надо
Код

$text='((lol)+(lol2)-((111)*(003)+007)) dsfs dfsd fsdf sdf
  asdasd (25-29) asdasd ((lol2)-2342)';
preg_match_all("#\((?:[^\)\(]+|(?R))*\)#is",$text,$res);
print_r($res);

PM MAIL   Вверх
ksnk
Дата 24.10.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



И каким образом вот такой результат поможет нам парсить нашу структуру?
Цитата

Array
(
    [0] => Array
        (
            [0] => ((lol)+(lol2)-((111)*(003)+007))
            [1] => (25-29)
            [2] => ((lol2)-2342)
        )

)



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Тигер
Дата 24.10.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



а что надо то? короче по сабжу, реги дерево не возвращают, но могут дерего выбрать. Вернёт дерево нам php =)
Код

<?php
$text='
<html>
<head>
   <title>hello</title>
</head>
<body>
     <h1>Must die</h1>
     <div>
        <div>
           <div>
               lol
          </div>
        </div>
     </div>
</body>
</html>
';
function Parse($text){
   $res=array();
   preg_match_all("#<([^\/\s]+)[^>]*>((?:(?:(?:(?!<\\1[^>]*>|<\/\\1>).)++|<\\1[^>]*>(?2)<\/\\1>))*)<\/\\1>#is",$text,$pr,PREG_SET_ORDER);
   for($i=0,$c=count($pr);$i<$c;$i++){  
       $ppr=Parse($pr[$i][2]); 
       if(empty($ppr)){
          $res[$pr[$i][1]]=$pr[$i][2];
       }else{
          $res[$pr[$i][1]]=$ppr;
       }
   }
   return $res;
}
print_r(Parse($text));

PM MAIL   Вверх
ksnk
Дата 24.10.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Это я уже не спрашиваю про то, как сюда можно вставить еще один уровень скобок. не только (), но и [], {} например. не говоря уже о "метках" - metka1, metka2 и так далее...

Добавлено через 1 минуту и 53 секунды
Тигер, к рекурсивным регуляркам это отношениея уже не имеет?  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Тигер
Дата 24.10.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



можно
Цитата

Тигер, к рекурсивным регуляркам это отношениея уже не имеет? 

я не телепат. Что не имеет? где не имеет?

Это сообщение отредактировал(а) Тигер - 24.10.2010, 12:22
PM MAIL   Вверх
ksnk
Дата 24.10.2010, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Код

$text='
<html>
<head>
   <title>hello</title>
</head>
<body>
     <h1>Must die</h1>
     <div>
        <div> Hello
           <div>
               lol
          </div>
        </div>
     </div>
</body>
</html>
';

а на таком примере hello будет видно?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Тигер
Дата 24.10.2010, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



Цитата

а на таком примере hello будет видно?

это не дерево. но можно сделать что даже так будет видно =)
PM MAIL   Вверх
ksnk
Дата 24.10.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Тигер @  23.10.2010,  22:45 Найти цитируемый пост)
skyboy, 
регулярки поддерживают рекурсию =) 


Цитата(skyboy @  24.10.2010,  00:14 Найти цитируемый пост)
хм. что-то я не представляю. как при помощи одной регулярки, пусть даже и рекурсивной, вычленить все узлы и их вложенность - построить дерево. Можно пример, пусть даже самый примитивнейший и "не проверял, работает ли"? 


Надеюсь, консенсус достигнут  smile 

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1167 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.