2013-07-26 5 views
2

저는 Perl에 아주 익숙합니다. 저는 몇 년 동안이 사이트를 사용하여 다른 프로젝트에 대한 질문에 대한 답변을 찾고 있었지만 그 답을 찾을 수없는 것 같습니다. 이건 ..Perl - 변수에 여러 부분 문자열 찾기?

내 스크립트는 정확한 정보를 분석하기 위해 스트립해야하는 데이터가있는 HTTP 응답을 수신합니다.

지금까지, 나는

my $output = substr ($content, index($content, 'Down'), index($content, '>')); 

이 단어 'Down'을 발견 한 후이 >을 찾을 때까지 그것을 substringing ..이 있어야 무슨 일을 할 것 같습니다 .. 문자열이 있습니다.

그러나 'Down' 문자열은 응답 내에서 여러 번 나타날 수 있으며, 첫 번째 예제를 찾은 후에 살펴보아야합니다.

부분 문자열을 재귀 적으로 가져 오는 방법은 무엇입니까?

+0

'/ g'수정 자와 정규식 일치를 사용 하시겠습니까? 'while ($ content = ~ /(Down.*?>)/g) {print $ 1}' – TLP

답변

5

한 가지 방법은 다음과 같습니다 : 당신의 도움 :) 주셔서 감사합니다 :

my $x="aa Down aaa > bb Down bbb > cc Down ccc >"; 

while ($x =~/(Down[^>]+>)/g){ 
     print $1; 
} 
2

또 다른 해결책, 반복없이 그냥 아래로 무엇 저장.

use Data::Dumper; 
my $x="aa Down aaa > bb Down bbb > cc Down ccc >"; 
my @downs = $x =~ m!Down([^>]+)>!gis; 
print Dumper(\@downs); 
+1

좋은 재귀 적 예는 아니지만 원래 샘플과 약간 다릅니다. 'i'플래그를 사용하면 대소 문자를 구분하지 않으므로 원하지 않을 수 있습니다. 괄호의 위치는 "Down aaa>"가 아니라 "aaa"가 캡처되도록합니다 (원하지 않을 수도 있음). 직접 편집을 제안하지만 6 자 이상이어야합니다 (하지만 정규식입니다!). –

+0

예, regexp에서 Down 및> string을 제거하는 것은 의도적이었습니다. "그냥 내려 놓은 것을 저장하는 것"즉. 문자열을 스트로크하지 않고>. – user1126070

관련 문제