2016-09-25 9 views
0

특정 패턴 다음과 특정 패턴 앞에있는 파일에서 단어를 찾고 싶습니다.패턴 뒤에 있고 다른 패턴 앞에있는 단어 찾기 perl을 사용하여

print("Hi", "My name is", "Tej"); 

그래서, 나 혼자 Tej 단어를 얻고 배열로 저장하려면 : 다음은 파일의 내용이다. 비슷하게, 위와 비슷한 패턴을 지니고 있지만 이름이 다른 여러 파일이 있으므로 모든 이름을 배열에 넣고 싶습니다. 즉, 패턴 print("Hi", "My name is", " 이후이고 패턴 "); 앞에있는 파일의 단어를 원합니다.

때때로 쉼표 다음의 공백이 누락됩니다.

필자는 파일을 열고 파일 핸들을 패턴 앞뒤에있는 단어를 검색하는 함수에 전달하는 스크립트를 작성했습니다.

sub search{          
my $file_handle = shift; 
while (<$file_handle>) 
{ 
/.print("Hi", "My name is", "[\s]+([A-Za-z_0-9]+)/ ; 
push @array, $1; 
} 
} 

나는 정규식이 작동하지 않습니다 알고 있지만 내가 필요로하는 단어를 찾는 방법에 대한 확실하지 않다 다음과 같이 함수의 코드입니다. 제공된 모든 도움을 주시면 감사하겠습니다. 감사

다음

답변

-1

내가 그것을 할 것입니다 방법은 다음과 같습니다

sub search {          
    my $file_handle = shift; 
    while (<$file_handle>) { 
     if (/print\("Hi", ?"My name is", ?"([^"]+)"\);/) { 
      push @array, $1; 
     } 
    } 
} 

내가 (이 경우, 즉 ()를) 정규식 내에서 특수 문자를 탈출하고, 나는 내 모든 비 따옴표에 맞게 "([^"]+)"을 사용 인용 부호.

공백 뒤에 물음표가 있으면 공백을 선택적으로 사용할 수 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 당신은 논리가 도움이됩니다. –

+0

팁 :'if (/ print \ ("안녕하세요", "내 이름은?, (^") +) "\); /) { push @array, $ 1; }'쓸 수 있습니다. {("$ name")/print (("안녕하세요", "내 이름은?, ("^ ") +)"\); /) { push @array, $ name; ("^") +) "\); /;'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ – ikegami