В Perl, в чем разница между s / ^ \ s + // и s / \ s + $ //? - PullRequest
8 голосов
/ 13 февраля 2012

Я знаю, что следующие три строки кода направлены на извлечение строки в $ value и сохранение ее в $ header. Но я не знаю, в чем разница между $value =~ s/^\s+//; и $value =~ s/\s+$//;.

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

Ответы [ 3 ]

11 голосов
/ 13 февраля 2012

С perldoc perlfaq4:

Как убрать пробел из начала / конца строки?

Замена может сделать это для вас. Для одной строки, вы хотите заменить все начальные или конечные пробелы ни на что. Вы можете сделать это с парой замен:

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 голос
/ 13 февраля 2012

Первый заменит пробел только в начале строки.

1 голос
/ 13 февраля 2012

^ означает, что начинается с, $ означает, заканчивается на этой строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...