[Perl] Регулярное выражение

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Hellboy
проходил мимо

[Perl] Регулярное выражение

Непрочитанное сообщение Hellboy » 2010-10-18 18:37:24

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

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

Всем заранее спасибо за проявленное внимание.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: [Perl] Регулярное выражение

Непрочитанное сообщение FreeBSP » 2010-10-18 19:01:39

Код: Выделить всё

/.*? Позиция: \[(.*?)\] .*?/
что то типа этого
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Hellboy
проходил мимо

Re: [Perl] Регулярное выражение

Непрочитанное сообщение Hellboy » 2010-10-19 17:25:30

FreeBSP писал(а):

Код: Выделить всё

/.*? Позиция: \[(.*?)\] .*?/
что то типа этого

Код: Выделить всё

$text = bla bla bla (sometext) Position: [ position one ] bla bla some more text;
$text = /.*? Позиция: \[(.*?)\] .*?/;
Не работает. :(

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: [Perl] Регулярное выражение

Непрочитанное сообщение FreeBSP » 2010-10-19 18:16:24

правильно
что попросили то и получили
ТЗ как поставлено?
Hellboy писал(а):
бла бла бла (т.е. какой-угодно текст) Позиция: [ Первая позиция ] бла бла бла (опять какой-угодно текст).
это не похоже на
Hellboy писал(а):

Код: Выделить всё

$text = bla bla bla (sometext) Position: [ position one ] bla bla some more text;
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Hellboy
проходил мимо

Re: [Perl] Регулярное выражение

Непрочитанное сообщение Hellboy » 2010-10-19 18:35:46

Если честно, не понял разницу... Если не трудно, объясните.

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: [Perl] Регулярное выражение

Непрочитанное сообщение FreeBSP » 2010-10-19 18:51:43

"Позиция" != "Position"
Hellboy писал(а):Необходимо, чтобы в этой строке перл искал сочетание "Позиция: [" и далее выдирал все что идет до закрывающей квадратной скобки
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Hellboy
проходил мимо

Re: [Perl] Регулярное выражение

Непрочитанное сообщение Hellboy » 2010-10-19 18:54:15

Простите, совсем заработался. На самом деле, скрипт, который я пробовал - это:

Код: Выделить всё

$text = bla bla bla (sometext) Position: [ position one ] bla bla some more text;
$text = /.*? Position: \[(.*?)\] .*?/;
И это не работает...

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: [Perl] Регулярное выражение

Непрочитанное сообщение FreeBSP » 2010-10-19 19:17:01

я перла не знаю. это первый скрипт, написанной мной на перле.

Код: Выделить всё

[20:14]~/# cat test.pl                                                                                                 [/root]root@freebsp.homeip.net
#!/usr/bin/perl
$text = "bla bla bla (sometext) Position: [ position one ] bla bla some more text";
$text =~ m/.*? Position: \[(.*?)\] .*?/;

print "\"$1\"\n";
[20:14]~/# ll test.pl                                                                                                  [/root]root@freebsp.homeip.net
-rwxr-xr-x  1 root  wheel  159 19 окт 20:14 test.pl
[20:14]~/# ./test.pl                                                                                                   [/root]root@freebsp.homeip.net
" position one "
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Hellboy
проходил мимо

Re: [Perl] Регулярное выражение

Непрочитанное сообщение Hellboy » 2010-10-20 11:39:03

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

Hellboy
проходил мимо

Re: [Perl] Регулярное выражение

Непрочитанное сообщение Hellboy » 2010-10-29 13:07:16

Опять вернулся к той же проблеме. Не пойму, в чем дело...
Есть текст:
Folder: [STAGE]
Workflow: [wf_start_ongoing_workflows] version [1].
Workflow run status: [Running]
Workflow run error code: [0]
Workflow run id [1930496].
Folder: [LOAD_STAGE]
Workflow: [TRANSFN_INTEGN_WF_LOAD_PATIENT_VISIT_CONCAT] version [1].
Workflow run status: [Running]
Workflow run error code: [0]
Workflow run id [1929853].
Folder: [STAGE]
Workflow: [wf_start_ongoing_workflows] version [1].
Workflow run status: [Running]
Workflow run error code: [0]
Workflow run id [1930496].
Folder: [STAGE]
Workflow: [wf_some_other_workflow] version [1].
Workflow run status: [Running]
Workflow run error code: [0]
Workflow run id [1930496].
Мне необходимо:
1. Если в папке CRMRKTNG_STAGE есть запущенные workflow, но не wf_start_ongoing_workflows, то необходимо получить имя этих самых workflow.
Т.е. в данном случае я должен получить wf_some_other_workflow.

Может я действую немного запутанно и можно проще, но как я делаю:
делаю сплит всего текста по "Folder". После этого прохожу по полученному массиву и проверяю, есть ли в этом массиве строка [STAGE] Workflow: [ -- не wf_start_ongoing_workflows-- ]. Если есть, то выбираю то, что находится между квадратными скобками.
Но есть проблема. Не получается сделать проверку на наличие [STAGE] Workflow: [ -- не wf_start_ongoing_workflows-- ].

Код: Выделить всё

~m/STAGE\][^\[]+Workflow:\s+\[(wf_start_ongoing_workflows)+\]/
Вот так находит как раз те папки, в которых есть wf_start_ongoing_workflows

Соответственно, надо поступать аналогично, но противоположно, чтобы найти другие папки:

Вот так:

Код: Выделить всё

~m/STAGE\][^\[]+Workflow:\s+\[[^(wf_start_ongoing_workflows)]+\]/
- не работает.

Вот так:

Код: Выделить всё

~m/STAGE\][^\[]+Workflow:\s+\[[(wf_start_ongoing_workflows){0}+\]/
- не работает.

В чем проблема? Подскажите

Andy
ст. лейтенант
Сообщения: 1117
Зарегистрирован: 2007-03-04 7:48:58
Откуда: Mytischi

Re: [Perl] Регулярное выражение

Непрочитанное сообщение Andy » 2010-10-29 15:35:42

Есть сайт, вроде неплохой, посвященный теме регулярных выражений.
Быть может поможет:
http://www.regular-expressions.info/
Jul 16 19:37:15 freebsd sshd[4152]: Invalid user idiot from 210.75.200.104