2012-02-13 2 views
8

다음 세 줄의 코드는 문자열을 $ value로 추출하여 $ header에 저장하는 것을 목표로합니다. 그러나 $value =~ s/^\s+//;$value =~ s/\s+$//;의 차이점을 모르겠습니다.

$value =~ s/^\s+//; 
$value =~ s/\s+$//; 
$header[$i]= $value; 
+0

단지 기록을 위해 ... "나는 코드의 다음 세 줄은 $ 값에 문자열을 추출하고 $ 헤더에 저장하는 것을 목표로 알고", 그들은하지 않습니다. 그들은 스칼라 $ 값의 끝에서 공백을 제거하고이를 배열 @header의 $ i 번째 요소에 넣는 것을 목표로합니다. – AmbroseChapel

답변

10

:

어떻게 문자열의 시작/끝에서 빈 공간을 제거합니까?

대체품을 사용할 수 있습니다. 단일 행의 경우 은 앞이나 뒤에있는 공백을 모두 공백으로 바꾸기를 원합니다. 결합 된 문은 별도의 것보다 느린 밖으로는 변하더라도

s/^\s+//; 
s/\s+$//; 

당신은 또한, 하나의 대체로서 그것을 쓸 수 있습니다 : 당신은 대체 한 쌍의 것을 할 수 있습니다. 그 하지만, 당신에게 문제가되지 않을 수 있습니다

s/^\s+|\s+$//g; 

을이 정규 표현식에서 교대는 처음이나 문자열의 끝에서 중 일치하는 앵커가 교대보다 낮은 우선 순위가 있기 때문이다. /g 플래그를 사용하면 대체 문자 이 가능한 모든 일치하므로 모두 가져옵니다. 후행 개행 문자가 \s+과 일치하고 $ 앵커가 문자열의 절대 끝과 일치 할 수 있으므로 줄 바꿈도 사라집니다.


그리고 perldoc perlrequick에서

:이 일치해야하는 위치

우리는 앵커에게 메타 ^$을 사용, 지정합니다. 앵커 ^은 문자열의 시작 부분 인 에서 일치 함을 의미하며 $은 의 끝에 일치하거나 문자열 끝에있는 줄 바꿈 앞에 의미합니다. 일부 예 :

"housekeeper" =~ /keeper/;   # matches 
"housekeeper" =~ /^keeper/;  # doesn't match 
"housekeeper" =~ /keeper$/;  # matches 
"housekeeper\n" =~ /keeper$/;  # matches 
"housekeeper" =~ /^housekeeper$/; # matches 
1

^는로 시작하는 단어는이 문자열로 끝납니다.

+0

'$'이 아니라'\ z'를 설명했습니다. '$'는 문자열의 끝에 일치하거나 문자열 끝에있는 줄 바꿈 앞에 일치합니다. – ikegami

1

첫 번째 줄은 줄 시작 부분의 공백 만 대체합니다. perldoc perlfaq4에서