2012-09-29 2 views
1

@ 기호로 참조되는 태그를 포함하는 텍스트 파일이 있습니다. 예 : 메모에 @home이 포함 된 경우 메모에 '집'태그가 지정됩니다.Perl 정규식 @ 문자 뒤의 모든 문자를 일치 시키십시오.

@ 문자 뒤에 모든 문자와 일치하지만 @ 문자는 포함하지 않는 Perl 정규식을 찾으려고합니다.

내가 가지고 성공적으로 (@work 등이 @home 일치 .e.g에 대한) 모든 태그를 일치하지만 @ 문자가 발탁 후 그래서 문자 만 수정하는 방법을 찾을 수 없습니다이 지금까지 (@\w+).

perl regex to match all words following a character을 살펴 보았지만이 문제를 해결할 수 없었습니다.

도움이 될 것입니다.

+0

되세요는 "캡처"서브 패턴을 보면'/ @ (\ + W) /' –

답변

4

@Quentin 말했듯이, @(\w+) 최고의 솔루션입니다. 당신이 정확하게 태그를 일치시킬 경우

#!/usr/bin/perl 

while (<>) { 
    while (/@(\w+)/g) { 
     print $1, "\n"; 
    } 
} 

대신 (?<[email protected])\w+을 시도 할 수 있습니다. @ 이후의 모든 문자와 일치하지만 @은 제외됩니다.

#!/usr/bin/perl 

while (<>) { 
    while (/(?<[email protected])\w+/g) { 
     print $&, "\n"; 
    } 
} 

참조 : Using Look-ahead and Look-behind

3

는 그냥 @ 그렇게는 캡처 그룹 외부에 이동 :

@(\w+) 
+0

내가 추측 그의'('와')'그의 구분 될 수 있습니다. 이 경우 그는 내부에 추가 그룹을 추가해야합니다. –

+0

감사합니다. 내 reg exp를 테스트하기 위해 Patterns라는 응용 프로그램을 사용하고 있는데 솔루션을 시도했지만 @ 여전히 일치하는 결과에서 강조 표시되었습니다. 솔루션을 보았을 때 코드로 시도하기로 결정 했으므로 방금 작업했습니다. 어쨌든 모든 도움을 주셔서 감사합니다. 나는 지금 Patterns가 여전히 전체 단어가 강조되어지는 것을 보여주는 이유를 알아 내야 만합니다. – user1707838

+0

하이라이트에 일치하는 텍스트가 표시되고 각 캡처 그룹이 표시되지 않기 때문일 가능성이 큽니다. – Quentin

관련 문제