The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите сделать регулярное выражение"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Помогите сделать регулярное выражение"  –1 +/
Сообщение от Tendro email on 09-Фев-16, 11:09 
Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
Сколько не пытался разобраться с регуляркой, так мне и не пошло.

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите сделать регулярное выражение"  +/
Сообщение от allez (ok) on 09-Фев-16, 11:49 
> Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
> Сколько не пытался разобраться с регуляркой, так мне и не пошло.
> Ситуация следующая - есть текст (ответ АПИ, полученый через 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". :-)

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Помогите сделать регулярное выражение"  +1 +/
Сообщение от Andrey Mitrofanov on 09-Фев-16, 11:54 
>регулярное выражение,

Эээ?? А на 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
$ _

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Помогите сделать регулярное выражение"  –1 +/
Сообщение от f2404 on 09-Фев-16, 18:19 
> Прошу подсказать регулярное выражение, которое подошло-бы для моих целей.
> Сколько не пытался разобраться с регуляркой, так мне и не пошло.
> Ситуация следующая - есть текст (ответ АПИ, полученый через 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";
}

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Помогите сделать регулярное выражение"  +1 +/
Сообщение от Pahanivo (ok) on 09-Фев-16, 23:19 
Что? Освоил форматирование выхлопа по столбцам? Взялся за джейсоны и эксмээльки? ))
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. "Помогите сделать регулярное выражение"  –1 +/
Сообщение от Tendro email on 10-Фев-16, 10:42 
> Что? Освоил форматирование выхлопа по столбцам? Взялся за джейсоны и эксмээльки? ))

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

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

7. "Помогите сделать регулярное выражение"  +/
Сообщение от Pahanivo (ok) on 10-Фев-16, 10:50 

> Посмотрел что ты мне отвечал ранее (гостевых ников несколько)

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

с глупыми вопросами туда единственная дорога


Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

6. "Помогите сделать регулярное выражение"  +/
Сообщение от Tendro email on 10-Фев-16, 10:43 
Товарищи, а возможно все-же сделать на Шелле/Баше, без сторонних программ или скриптов?
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "Помогите сделать регулярное выражение"  +/
Сообщение от Andrey Mitrofanov on 10-Фев-16, 11:34 
> Товарищи, а возможно все-же сделать на Шелле/Баше, без сторонних программ или скриптов?

Да, можно написать парсер сложного формата на шеле, но делать _этого_ не нужно ни-ког-да.

Объяснять надо?

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

11. "Помогите сделать регулярное выражение"  +/
Сообщение от Andrey Mitrofanov on 10-Фев-16, 12:37 
>но

Хотя, с другой стороны, если по собственному опыту... _Один_ раз таки надо^Wможно сделать, если и пока есть силы и время, чтобы _понимать_, почему [больше]:
> делать _этого_ не нужно ни-ког-да.

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

10. "Помогите сделать регулярное выражение"  +/
Сообщение от Tendro email on 10-Фев-16, 12:21 
Ладно, не важно, сам что-то придумаю.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

12. "Помогите сделать регулярное выражение"  +/
Сообщение от Tendro email on 10-Фев-16, 14:19 
Итак, внимание! Невероятный! Сложный! Тяжелый! Неповторимый скрипт! Всего на три простых действия...

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

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


Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Помогите сделать регулярное выражение"  +/
Сообщение от Pahanivo (ok) on 10-Фев-16, 18:26 
> ииии опля,

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

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

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

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

а ха-ха ...

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

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

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

20. "Помогите сделать регулярное выражение"  +/
Сообщение от Tendro email on 15-Фев-16, 14:40 
> пацталом )) а ты когда-нибудь вообще видел текстовые структурированные данный кроме этих?

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

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

21. "Помогите сделать регулярное выражение"  +/
Сообщение от Tendro email on 15-Фев-16, 14:42 
> Это самые популярные слова junior программеров перед увольнением :)
> Ну или по срочному фиксингу среди ночи после пьянки и вместо траха
> :)

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

Ответить | Правка | ^ к родителю #18 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

28. "Помогите сделать регулярное выражение"  +/
Сообщение от Pahanivo (ok) on 15-Фев-16, 16:17 
а вообще конечно занятно, придти на форум, куесосить всех в течении 30 постов, мол дебилы и нихера не понимаете, а потом заявить что я сам вообще то нихера не понимаю и вообще "хорошо что я не программер".
попахивает каким то клиническим слабоумием ...
Ответить | Правка | ^ к родителю #27 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

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

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

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

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

25. "Помогите сделать регулярное выражение"  +/
Сообщение от Pahanivo (ok) on 15-Фев-16, 16:05 
> #!/bin/sh
> perl -e 'system("x-www-browser \"https" . "://duckduckgo.com/?q=" . "perl+one-liner+in+shell\"")'

три процесса вместо одного? оригинально!


Ответить | Правка | ^ к родителю #23 | Наверх | Cообщить модератору

26. "Помогите сделать регулярное выражение"  +/
Сообщение от Pahanivo (ok) on 15-Фев-16, 16:06 
> Sed и grep стандартные программы, которые есть во всех системах на Линуксе.

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

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

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

Ответить | Правка | ^ к родителю #22 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #26 | Наверх | Cообщить модератору

30. "Помогите сделать регулярное выражение"  +/
Сообщение от Pahanivo (ok) on 15-Фев-16, 16:20 
> Ладно, мастер, хватит понтов, приведи легкое, красивое и действенное решение моей задачи,
> и на этом закончим.

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

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

31. "Помогите сделать регулярное выражение"  +/
Сообщение от Andrey Mitrofanov on 15-Фев-16, 19:06 
> Ладно, мастер, хватит понтов,

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

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

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

Ответить | Правка | ^ к родителю #29 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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