我有一个由“|”分隔的固定消息... 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 =”和“|”之间
你能告诉我正则表达式吗?
答案 0 :(得分:1)
最佳方法取决于您对要匹配的数据的了解程度。如果你知道它只包含数字和破折号:
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"
}
答案 1 :(得分:0)
与往常一样,解决问题的方法不止一种。因此,没有“正则表达式”这样的东西。 但你肯定希望perldoc分裂。
答案 2 :(得分:0)
像这样的东西将比其他所有东西都匹配,然后除了|
之外的其他东西[^=]+=([^|])+