2011-03-23 4 views
0

"|"로 구분 된 고정 메시지가 있습니다 ... tag = value는 구분 기호 사이의 쌍입니다. "11 ="과의 첫 번째 항목 사이에서 데이터를 추출하는 방법지정된 문자 사이의 패턴을 일치시키는 방법은 무엇입니까?

(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

에게 원하는

정규식을 말씀해 주시겠습니까?

+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" 
} 
0

항상 그렇듯이 문제를 해결하는 방법은 1 가지 이상입니다. 따라서 "정규 표현식"같은 것은 없습니다. 하지만 분명히 perldoc 분할을 원할 것입니다.

+0

이것은 매우 유용한 답변이 아닙니다. – Kobi

+0

그것은 좋지는 않았지만, | 그리고 나서 =는 일종의 실행 가능한 해결책에 영향을 미쳤을 것입니다. –

0

뭔가 이상 다른 = 다음 모든 것보다 다른 모든 것들과 일치합니다 |

[^=]+=([^|])+ 
관련 문제