The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Помогите сделать регулярное выражение, !*! Tendro, 09-Фев-16, 11:09  [смотреть все]
Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
Сколько не пытался разобраться с регуляркой, так мне и не пошло.

Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
[{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
Мне требуется получить ID, который пренадлежит Васе.
Очень надеюсь на вашу помощь!

  • Помогите сделать регулярное выражение, !*! allez, 11:49 , 09-Фев-16 (1)
    > Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
    > Сколько не пытался разобраться с регуляркой, так мне и не пошло.
    > Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
    > [{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
    > Мне требуется получить ID, который пренадлежит Васе.
    > Очень надеюсь на вашу помощь!

    Вам выдается ответ в формате JSON. Для его разбора проще будет использовать скрипт
    на Perl, Python или любом другом языке, в котором есть подключаемая библиотека для
    работы с JSON. Ну, или искать по запросу вида "json parsing bash regular expression". :-)

  • Помогите сделать регулярное выражение, !*! Andrey Mitrofanov, 11:54 , 09-Фев-16 (2) +1
    >регулярное выражение,

    Эээ?? А на mips64 ассемблере не набросать JSON-парсер?...

    > Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
    > [{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
    > Мне требуется получить ID, который пренадлежит Васе.
    > Очень надеюсь на вашу помощь!

    $ echo '[{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]' \
    > |jq '.[]|select(.name=="vasya").id'

    434648634
    $ _

  • Помогите сделать регулярное выражение, !*! f2404, 18:19 , 09-Фев-16 (3) –1
    > Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
    > Сколько не пытался разобраться с регуляркой, так мне и не пошло.
    > Ситуация следующая - есть текст (ответ АПИ, полученый через curl):
    > [{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]
    > Мне требуется получить ID, который пренадлежит Васе.
    > Очень надеюсь на вашу помощь!

    Правильно, конечно, разбирать json.

    Но можно использовать следующий скрипт на perl:


    #!/usr/bin/perl

    my $user = "vasya";
    my $line = '[{"id":434648634,"name":"vasya","distribution":"petya","blabla":null},{"id":63484684,"name":"maks","distribution":"anton","blabla":null}]';
    if ($line =~ /\"id\":(\d+),\"name\":\"$user\"/) {
        my $ret = $1;
        print "$ret\n";
    }

  • Помогите сделать регулярное выражение, !*! Pahanivo, 23:19 , 09-Фев-16 (4) +1
    Что? Освоил форматирование выхлопа по столбцам? Взялся за джейсоны и эксмээльки? ))
    • Помогите сделать регулярное выражение, !*! Tendro, 10:42 , 10-Фев-16 (5) –1
      > Что? Освоил форматирование выхлопа по столбцам? Взялся за джейсоны и эксмээльки? ))

      На вывод по столбцам забил, ибо неудобно. Сделал светодиодную панель с индикацией ошибок, и не нужно в консоль лезть.
      Посмотрел что ты мне отвечал ранее (гостевых ников несколько) - зачастую отправляешь в гугл, и все, при этом толком ничего не советуя, и в конце концов дискуссия заканчивается кучей сообщений не по делу, и без какого либо ответа.

  • Помогите сделать регулярное выражение, !*! Tendro, 10:43 , 10-Фев-16 (6)
    Товарищи, а возможно все-же сделать на Шелле/Баше, без сторонних программ или скриптов?
  • Помогите сделать регулярное выражение, !*! Tendro, 12:21 , 10-Фев-16 (10)
    Ладно, не важно, сам что-то придумаю.
  • Помогите сделать регулярное выражение, !*! Tendro, 14:19 , 10-Фев-16 (12)
    Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых действия...

    echo "$string" | sed 's/{/\n\r/g' | grep 'vasya' | sed 's/^.*"id"://; s/,.*$//'

    Вот реально, объясните мне, глупому, зачем велосипеды в виде скриптов, перла и левого софта?
    Ну и самое главное - объясните почему-же подобные "парсеры сложного формата на шеле" "делать _этого_ не нужно ни-ког-да"?

    • Помогите сделать регулярное выражение, !*! Pahanivo, 15:01 , 10-Фев-16 (13)
      > Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых
      > действия...
      > echo "$string" | sed 's/{/\n\r/g' | grep 'vasya' | sed 's/^.*"id"://; s/,.*$//'

      и опа-на ... тут же наступаем на грабли ...
      где гарантия что что значение vasya принадлежит нужному нам атрибуту?
      а если name:vasya_mudakov?
      > Вот реально, объясните мне, глупому, зачем велосипеды в виде скриптов, перла и
      > левого софта?
      > Ну и самое главное - объясните почему-же подобные "парсеры сложного формата на
      > шеле" "делать _этого_ не нужно ни-ког-да"?

      потому что это, !ВНЕЗАПНО!, не парсер, а поиск, причем фиксированного значения, в строке фиксированного формата (кстати, как я показал выше еще и не до конца доделанный).
      ну а вообще - твой пример весьма простой и редковстречающийся примитив. стоит совсем чуток увеличить сложность и все, приплыли.
      модифицируй свой скрип следующим образом: сделать поиск по списку (name задается не одним значение, а списком, скажем файлом), и самое главное - выдерни два атрибута (атрибуты могут идти в произвольном порядке).
      и вот тут ты сразу поймешь недостатки своего решения ...


      • Помогите сделать регулярное выражение, !*! Tendro, 16:32 , 10-Фев-16 (14) –1
        А мне вроди как парсер и незачем, мне нужно получить нужное мне значение со стандартного вида JSON-ответа. JSON-ответ меняться не будет, другие значения мне получать тоже без надобности, мне всего навсего нужно получить id элемента с определенным именем. Я об этом, кстати, в первом сообщении писал, можешь перечитать если не веришь. Я не пишу универсальный парсер на все случаи жизни! Выше об этом сказано!

        Ладно, предположим что у нас есть там несколько Вась - окей, вносим малюсенькую-малюсенькую коррективу в скрипт:
        echo "$string" | sed 's/{/\n\r/g' | grep '"name":"vasya",' | sed 's/^.*"id"://; s/,.*$//'
        ииии опля, нам неважно сколько там будет в ответе Вась, ответ будет правильным.

        • Помогите сделать регулярное выражение, !*! Pahanivo, 18:26 , 10-Фев-16 (15)
          > ииии опля,

          дорогуша, проверь на этом
          {
            "id":434648634,
            "name":"vasya",
            "distribution":"petya",
            "blabla":null
          }

          иногда лучше молчать чем говорить, и казаться умнее

          • Помогите сделать регулярное выражение, !*! Tendro, 19:06 , 10-Фев-16 (16) –1
            Ты вообще читаешь что я пишу?
            ПОВТОРЯЮ - Я НЕ ПИШУ УНИВЕРСАЛЬНЫЙ ПАРСЕР!!! Есть сайт, с которого я запрашиваю информацию, ответ шаблонный, он не меняется!
            Да и вообще, ты хоть на одном сайте видел Json с переносом строки? Если да - приведи пример. Хотя лучше молчи... Не старайся показаться тем, сам знаешь кем...

            Короче, если тебе станет легче, вот:
            echo "$string" | sed 's/\n//g' | sed 's/{/\n\r/g' | grep '"name":"vasya",' | sed 's/^.*"id"://; s/,.*$//'
            схавает и твой пример, которого в жизни не увидишь. Дальше будет Json с пробелами?

            • Помогите сделать регулярное выражение, !*! Pahanivo, 20:32 , 10-Фев-16 (17)
              > Ты вообще читаешь что я пишу?
              > ПОВТОРЯЮ - Я НЕ ПИШУ УНИВЕРСАЛЬНЫЙ ПАРСЕР!!! Есть сайт, с которого я
              > запрашиваю информацию, ответ шаблонный, он не меняется!

              а ха-ха ...

              > Да и вообще, ты хоть на одном сайте видел Json с переносом
              > строки?

              пацталом )) а ты когда-нибудь вообще видел текстовые структурированные данный кроме этих?

              • Помогите сделать регулярное выражение, !*! Tendro, 14:40 , 15-Фев-16 (20)
                > пацталом )) а ты когда-нибудь вообще видел текстовые структурированные данный кроме этих?

                А мы все продолжаем умничать, при этом не приводя ни одного аргумента.
                Предоставь сайт, на котором АПИ отдает Json в другом формате. Вот чисто адрес сайта, и все, без очередных понтов.

                • Помогите сделать регулярное выражение, !*! Pahanivo, 16:00 , 15-Фев-16 (24)
                  > Предоставь сайт, на котором АПИ отдает Json в другом формате. Вот чисто
                  > адрес сайта, и все, без очередных понтов.

                  я выше привел пример который приводит к неработоспособности твоего начального решения, но добавлять костыли в конвейер для тебя гораздо проще чем написать железобетонный перловый регекс.
                  для начала предоставь (слово то какое :) мне хотя бы один  один сайт, который гарантировал бы что json с него завтра прилетит в том же формате, с теме же имена и позициями аргументов, без перевода строки в случайном месте и той же последовательностью используемой в качестве перевода строки, и значения аргументов внезапно не окажутся скажем в utf или вообще 1251 :)

            • Помогите сделать регулярное выражение, !*! _, 23:33 , 10-Фев-16 (18) +1
              > Есть сайт, с которого я запрашиваю информацию, ответ шаблонный, он не меняется!

              Это самые популярные слова junior программеров перед увольнением :)
              Ну или по срочному фиксингу среди ночи после пьянки и вместо траха :)

              • Помогите сделать регулярное выражение, !*! Tendro, 14:42 , 15-Фев-16 (21)
                > Это самые популярные слова junior программеров перед увольнением :)
                > Ну или по срочному фиксингу среди ночи после пьянки и вместо траха
                > :)

                Сочувствую junior’у.
                Вот хорошо что я не программер, и мало того, моя профессия даже с компьютерами не связана, ага, я всего навсего пользователь, который использует Линуск на десктопе...

                • Помогите сделать регулярное выражение, !*! Pahanivo, 16:09 , 15-Фев-16 (27)
                  > Сочувствую junior’у.
                  > Вот хорошо что я не программер, и мало того, моя профессия даже
                  > с компьютерами не связана, ага, я всего навсего пользователь, который использует
                  > Линуск на десктопе...

                  это типа такой новый и современный гендерный типаж? линуксовый бдсм с элементами фапания на собственное ЧСВ?
                  и еще вопрос для непрограммеров - название подфорума читал? маны и доки в другой части сайта лежат.

    • Помогите сделать регулярное выражение, !*! Аноним, 09:49 , 11-Фев-16 (19) +1
      > Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых
      > действия...
      > echo "$string" | sed 's/{/\n\r/g' | grep 'vasya' | sed 's/^.*"id"://; s/,.*$//'
      > Вот реально, объясните мне, глупому, зачем велосипеды в виде скриптов, перла и
      > левого софта?
      > Ну и самое главное - объясните почему-же подобные "парсеры сложного формата на
      > шеле" "делать _этого_ не нужно ни-ког-да"?

      Затем что ты юзаешь sed и grep, а из баша просто их вызываешь. Вот затем же и перл с левым софтом. Из баша у тебя только "echo" и пайп "|", все остальное - левый софт.

      • Помогите сделать регулярное выражение, !*! Tendro, 14:47 , 15-Фев-16 (22)
        > Затем что ты юзаешь sed и grep, а из баша просто их
        > вызываешь. Вот затем же и перл с левым софтом. Из баша
        > у тебя только "echo" и пайп "|", все остальное - левый
        > софт.

        Sed и grep стандартные программы, которые есть во всех системах на Линуксе. Перл то вроди тоже есть, но я его совсем не знаю, плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под него делать (хотя тут я могу ошибаться).

        • Помогите сделать регулярное выражение, !*! Andrey Mitrofanov, 15:07 , 15-Фев-16 (23)
          > Перл то вроди тоже есть, но я его совсем не знаю,
          > плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под
          > него делать (хотя тут я могу ошибаться).

          Надо бы ло на "не знаю" и остановиться, уж на что я перла не знаю, но:

          #!/bin/sh
          perl -e 'system("x-www-browser \"https" . "://duckduckgo.com/?q=" . "perl+one-liner+in+shell\"")'

        • Помогите сделать регулярное выражение, !*! Pahanivo, 16:06 , 15-Фев-16 (26)
          > Sed и grep стандартные программы, которые есть во всех системах на Линуксе.

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

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

          ты ошибаешься в 146% своих высказываний.

          • Помогите сделать регулярное выражение, !*! Tendro, 16:17 , 15-Фев-16 (29)
            >> Sed и grep стандартные программы, которые есть во всех системах на Линуксе.
            > есть то они есть, но огорчу тебя - реализация у них отличается.
            > и отточенный скриптяга во фряхе может не полететь под линем.
            >> Перл то вроди тоже есть, но я его совсем не знаю,
            > а что ты вообще знаешь? и зачем тогда пытаешься тягать и парсить
            > данные ))
            >> плюс его внутри Shell-скрипта не выполнить нормально, нужно отдельный скрипт под
            >> него делать (хотя тут я могу ошибаться).
            > ты ошибаешься в 146% своих высказываний.

            Ладно, мастер, хватит понтов, приведи легкое, красивое и действенное решение моей задачи, и на этом закончим.

            • Помогите сделать регулярное выражение, !*! Pahanivo, 16:20 , 15-Фев-16 (30)
              > Ладно, мастер, хватит понтов, приведи легкое, красивое и действенное решение моей задачи,
              > и на этом закончим.

              вообще десяток постов назад ты кричал что "вот оно" и рамахивал конвейером с костылями ...
              или что? уже не работает? :) если что, то сочувствие на данном форуме изливается посетителями без меры ...

            • Помогите сделать регулярное выражение, !*! Andrey Mitrofanov, 19:06 , 15-Фев-16 (31)
              > Ладно, мастер, хватит понтов,

              Притомолся? Ай, бедный.

              > приведи легкое, красивое и действенное решение моей задачи,
              > и на этом закончим.

              Уже же, шесть дней и [U]двадцать семь постов[/U] тому назад, в #2 !  WTF, человече?




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру