2012-04-04 1 views
1

에서 별도의 변수 이름 난이 문자열을 가지고 :펄 - 유형

int name 
const int level 
const char   * const     format 
(float) int promenna 
(char *) int jina 

나는 펄에 나머지 변수 (이름, 레벨, 형식, ...)의 이름을의 separete 수 있습니까? /((\.*\s*\w+)+)(\s+)(\w+)$/으로 몇 가지 정규 표현식을 시도했지만 그다지 잘하지 못하고 문제가 있습니다. 그럼 누구든지 쉬운 해결책이 있습니까? 그리고 세 번째 예에서 많은 공백이 있고 그 수를 반드시 써야합니다. \ s *가있을 수 있습니다. 고마워요

편집 : 내가 원하는 것을 나쁘게 설명합니다. 나는 분리 된 이름을 원한다고 말했고 나는 문자열에서 마지막 단어 (변수 이름)를 제거해야 함을 의미한다. 오해해서 유감입니다. 이 작업을 수행하기 위해

int 
const int 
const char * const 
(float) int 
(char *) int 
char * 
+0

에서

#!perl my @strings = ( 'int name', 'const int level', 'const char * const format', '(float) int promenna', '(char *) int jina', 'char *a' ); for my $string (@strings) { $string =~ s/\w+$//; $string =~ s/\s*$//; $string =~ s/\s+/ /g; print "$string\n"; } 

결과, 당신은이 필요합니다 :

s/\w+$// 

는 예를 들어, 사용 –

+0

아니요, 사용자 구조 및 유형과 작동해야하기 때문에 핵심 단어 목록을 가질 수 없습니다. 초등 난 그냥 문자열에서 마지막 단어를 제거해야하지만 다른 단어 사이의 공백 문자 수를 유지해야합니다. –

+0

그 문제를 분명히합니다. 감사! –

답변

4

그냥 아무것도 마지막 '단어를'대체

, 핵심어 목록을 작성하고 기본적으로 다른 모든 것을 변수 이름으로 취급합니다. 그 맞습니까?
+0

정확히 내가 찾던 것이었지만 나는 더 많은 것을했습니다. 내가 char *를 갖고 char *이 필요한 경우 어떨까요? 이제 char * a를 얻습니다. 고맙습니다. –

+0

이 사건을 처리하도록 업데이트되었습니다. 이제 라인에 후미 공백이 남지만, 필요한 경우 chomp 또는 다른 정규식으로 처리 할 수 ​​있습니다. – ptomli

+0

정확히 내가 필요로하는 것입니다 (단지 후행 공백을 제거하기 위해 하나의 정규식을 추가하십시오). –