2012-02-13 38 views
8

Tôi biết rằng ba dòng mã sau đây nhằm mục đích giải nén chuỗi thành giá trị $ và lưu trữ nó trong $ header. Nhưng tôi không biết sự khác biệt giữa $value =~ s/^\s+//;$value =~ s/\s+$//; là gì.

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

"Tôi biết rằng ba dòng sau mã nhằm mục đích để trích xuất các chuỗi thành $ giá trị và lưu trữ nó trong $ tiêu đề" ... chỉ cần cho các hồ sơ, họ không. Chúng nhắm đến khoảng trống từ các đầu của giá trị $ vô hướng và đặt nó vào phần tử thứ i $ của mảng @header. – AmbroseChapel

Trả lời

10

Từ perldoc perlfaq4:

Làm thế nào để dải không gian trống từ đầu/kết thúc của một chuỗi?

Thay thế có thể thực hiện việc này cho bạn. Đối với một dòng, bạn muốn thay thế tất cả khoảng trống đầu hoặc cuối bằng không có gì. Bạn có thể làm điều đó với một cặp thay thế:

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

Bạn cũng có thể viết đó như là một thay thế duy nhất, mặc dù nó quay ra tuyên bố kết hợp là chậm hơn so với những cái riêng biệt. Đó có thể không quan trọng với bạn, mặc dù:

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

Trong biểu thức chính quy này, thay đổi luân phiên phù hợp hoặc tại đầu hoặc cuối của chuỗi kể từ khi neo có một ưu tiên thấp hơn so với thay đổi luân phiên. Với cờ /g, sự thay thế làm cho tất cả các kết quả phù hợp có thể có, do đó, nó nhận được cả hai. Hãy nhớ, đường kẻ cuối mới khớp với số \s+ và neo $ có thể khớp với đầu cuối tuyệt đối của chuỗi , vì vậy dòng mới cũng biến mất.


Và từ perldoc perlrequick:

Để xác định nơi nó phải phù hợp, chúng tôi sẽ sử dụng neo metacharacters ^$. Neo ^ có nghĩa là khớp tại số bắt đầu của chuỗi và neo $ có nghĩa là khớp ở cuối chuỗi hoặc trước một dòng mới ở cuối chuỗi. Một số ví dụ:

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

^có nghĩa là bắt đầu bằng, $ có nghĩa là kết thúc bằng chuỗi này.

+0

Bạn đã mô tả '\ z', không phải' $ '. '$' khớp với phần cuối của chuỗi hoặc trước một dòng mới ở cuối chuỗi. – ikegami

1

Thứ nhất sẽ chỉ thay thế khoảng trắng ở đầu dòng.

Các vấn đề liên quan