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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> парсим регуляркой в массив 
V
    Опции темы
bars80080
Дата 9.10.2008, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Добрый день,

хочу распарсить некий текст в массив:
Код

<pre>
<?php
$txt = '<block id="0">wertwet werg we</block>
<block id="rtyu">wer fdg3456h ;%:8ЪХ !" fdg</block>';

$w = preg_split('/(<block>)[.]*(<\/block>)/', $txt);
var_dump($w);
?>
</pre>

т.е. на выходе хочу получить:

Код
$w = array(
                    0 => 'wertwet werg we',
                    'rtyu' => 'wer fdg3456h ;%:8ЪХ !" fdg'
);


понятное дело в регулярках слаб, и дальше даже мало представляю что делать
даже если не вытягивать id, а просто получить численный массив со значениями - то что содержиться внутри тэгов <block>
PM MAIL WWW   Вверх
Sunvas
Дата 9.10.2008, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



Код

$txt = '<block id="0">wertwet werg we</block>
<block id="rtyu">wer fdg3456h ;%:8ЪХ !" fdg</block>';

preg_match_all('#<block[^>]*>(.+?)</block>#is', $txt,$w);
var_dump($w[1]);


Вернет:
Код

array(2) {
  [0]=>
  string(15) "wertwet werg we"
  [1]=>
  string(26) "wer fdg3456h ;%:8ЪХ !" fdg"
}


Добавлено через 4 минуты и 47 секунд
С идами:
Код

$txt = '<block id="0">wertwet werg we</block>
<block id="rtyu">wer fdg3456h ;%:8ЪХ !" fdg</block>';

preg_match_all('#<block id="([^"]+)">(.+?)</block>#is',$txt,$w);
var_dump($w);


Собрать нужны массив, думаю, сможешь сам.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
bars80080
Дата 9.10.2008, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



а, спасибо. соберём как-нибудь


однако, я уже собрал на пальцах без регулярок:
Код
        $e = array();
        $a = explode('</block>', $t);
        for($i = 0; isset($a[$i]); $i++) {
            $w = explode('<block', $a[$i]);
            if(count($w) != 2) { continue; }
            $q = strpos($w[1], '>');            
            if($q !== false) {
                $id = explode('"', substr($w[1], 0, $q));
                if(!isset($id[1])) continue;
                $e[$id[1]] = substr($w[1], ($q + 1)); }}
посему сакральный вопрос: а чем лучше пользоваться: регулярками или примерно такой дербанилкой, если она не слишком сложная?
PM MAIL WWW   Вверх
Sunvas
Дата 9.10.2008, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


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

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



bars80080, лучше регулярками т.к. через 10 лет сразу будет видно, что хотел сказать тем или иным участком кода. А такую "дербанилку" будешь долго разбирать. Вопрос производительности в принципе как таковой не стоит.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
bars80080
Дата 9.10.2008, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

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



Цитата(Sunvas @  9.10.2008,  12:39 Найти цитируемый пост)
.к. через 10 лет сразу будет видно, что хотел сказать тем или иным участком кода

это только в случае, если я всё же освою за 10 лет эти регулярки...

сэнкс
PM MAIL WWW   Вверх
georgiy11
Дата 12.10.2008, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

bars80080
посему сакральный вопрос: а чем лучше пользоваться: регулярками или примерно такой дербанилкой, если она не слишком сложная? 

Кстати я согласен с авторами книги "PHP5.Библиотека професионала", что такая дерибаниловка smile  более читаема чем регулярки, даже если бы я лихо их знал. Так как при "постепенном" проходе по коду мысля быстрее ухватывает логику алгоритма чем сокращенная запись.
Вы ж ведь сами говорите что отступи там, припиши здесь .... и т.д. это явно не сокращенная форма записи даже в ущерб обьёму кода, в смысле строк.  
Другое дело что в "регулярных" функциях есть какието дополнительные преимущества это уже другой вопрос. {ИМХО}

Это сообщение отредактировал(а) georgiy11 - 12.10.2008, 05:00
PM MAIL   Вверх
ksnk
Дата 12.10.2008, 09:02 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



bars80080georgiy11, регулярки - это отдельный язык. Что-то типа иностранного smile. Уровень владения им  - "иероглифы китайские", и "читаю и пишу со словарем", через "свободно читаю тех-документацию" до "свободно общаюсь с иностранцами". На первых двух уровнях владения языком - нужно писать дополнительные подсказки, подстрочники на "родном" языке, а на следующих, костыль в виде подстрочника уже только мешает  smile 

Польза регулярок в приведенном выше примере в том, что логика разбора сложного текста умещается в одну строку, а не размазывается по паре десятков строк "подстрочника" smile



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! 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.

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


 




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


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

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