Как сопоставить шаблон между указанными символами? - PullRequest
0 голосов
/ 23 марта 2011

У меня фиксированное сообщение, разделенное символом "|" ... tag = value - это пара между разделителем;

(8=FIX.4.2|9=0360|35=8|49=BLPFT|56=ESP|34=8415|52=20110201-15:59:59|50=MBA|143=LN|115=MSET|57=2457172|30=CHIX|60=20110201-15:59:59.121|150=1|31=56.3100|151=71785|32=137|6=56.4058|37=9D9ZIhgu4BGU9sBtfHcYeQA|38=97370|39=1|40=1|11=20110201-05529|12=0.0012|13=2|14=25585|15=EUR|76=CHIXCCP|17=272674|47=A|167=CS|18=1|48=FR0000131104|20=0|21=1|22=4|113=N|54=1|55=BNP|207=FP|29=1|59=0|10=205|)

Как извлечь данные между "11 =" и первым появлением "|" после матча?

Например, я хочу данные

20110201-05529

который находится между "| 11 =" и "|"

Можете ли вы сказать мне регулярное выражение?

Ответы [ 3 ]

1 голос
/ 23 марта 2011

Лучший подход будет зависеть от того, сколько вы знаете о данных, которые вы пытаетесь сопоставить.Если вы знаете, что он будет состоять только из цифр и тире:

m/11=([0-9\-]+)/

И наоборот, если данные могут содержать символы любого типа, используйте:

m/11=([^|]+)/

Что соответствует любому, что не символ трубы.Это, вероятно, самое надежное выражение.

В обоих случаях нужные данные записываются в специальную переменную $1.

Если вы не всегда хотите совпадать со значением дляклавиша 11, вы можете использовать переменные в шаблоне, так:

my $key = 42; # or any number
if ($text =~ m/$key=([^|]+)/) {
    print "I found $1"; # prints "I found 20110201-05529"
}
0 голосов
/ 23 марта 2011

Что-то вроде этого будет соответствовать всему, кроме = тогда всему, кроме |

[^=]+=([^|])+
0 голосов
/ 23 марта 2011

Как всегда, существует более 1 способа решения проблемы. Следовательно, не существует такого понятия, как «регулярное выражение». Но вам наверняка захочется разделить perldoc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...