2013-07-06 1 views
-1

내가 아래에있는 내 정규식에 다음 문자열을 모두 일치 할 수 있어야합니다. 그것은 작동하지 않는 것 같습니다. 어떤 제안?펄 정규식 반 총장은 로그인

문자열 비교 : 이것은 내 펄 코드는

5878ce43aa3f1e1d713427d118115310 -1 Script Kiddie <perm> 
f939f88b50fa5f0099b6751e7be27761 -1 Hacking <perm> 
468f6634c5a9b00b5b3872dd6437143f 1356474103 Being Annoying <7day> 

입니다. 지금은 작동하지 않습니다. 어떤 제안? 처음 두 필드 그들에 공백없이 항상 경우

my $bn_re = q{(.+?) (\d+) (.+?)}; 
+3

그것은 "펄 코드"입니다. 그것은 잘 작동하는 것 같습니다. 그것의 문자열이고, 그것은 문자열이하는 일을하는 문자열입니다. 너는 무엇을 기대 했는가? 당신은 당신이 한 일과 그렇지 않은 일에 더 구체적이어야합니다. – TLP

+5

'\ d +'는 '-1'과 일치하지 않습니다. 그걸 기대 했니? –

+1

"작동하지 않음"을 정의하십시오. 너 뭐하려고? –

답변

1
$bn_re =~ /[0-9a-z]+?\s[-0-9]+\s[\w\s]+?[<>a-z0-9]+?/i 
6

, 만 얻을 수있는 LIMIT 옵션을 사용하여 큰 효과를 split를 사용할 수있는 세 가지 분야 :

입니다
my ($str, $num, $other) = split ' ', $_, 3; 

, 이것은 또한

while (<>) { 
    ... # your code here 
} 

:이 같은 파일 무언가를 읽을 가정

my $bn_re = q{(.+?) (\d+) (.+?)}; 

는 정규식이 아닙니다. q()qr()과 혼동시킬 수 있습니다. 또한 자동적으로 일치 연산자 m//에서 정규 표현식을 포함

$str =~ $bn_re; 

의 기능을 혼동 할 수있다. 하지만 qr()을 사용해야합니다. q() 연산자는 작은 따옴표에서 수행하는 작업을 수행합니다.

또한, 당신은 당신이 그것을 허용하는 경우 .+?은 하나의 문자와 일치된다는 점에 유의해야한다. 그것은 당신의 "정규 표현식"의 끝에서 그렇듯이. 문자열이 끝날 때 중 하나를 수행하십시오

... (.+)/ # matching greedily 
... (.+?)$/ # using anchor to end of string 
+0

고마워요! – user2202426

+2

당신을 진심으로 환영합니다. 질문에 답이 나면 체크 표시를 클릭하여 대답을 수락 할 수 있습니다. – TLP