Может кто-нибудь сказать мне, каково определение двух приведенных ниже кодов?

$file_directory =~ s/[^\\\/]+$//;

$new_id =~ m/([ABCISRDT]\d\d\.\d\d\.\d\d)$/i)

Он похож на код ниже, но синтаксис отличается

$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;

Я понимаю, что s / [- это поиск, ^ - символ начала строки, а $ - символ конца строки; Я не понимаю, это \ /] +.

Допустим, каталог файлов W: \ folder_1 \ music \ common в Perl-скрипте должен быть W: \\ folder_1 \\ music \\ common, но в нем есть дополнительный \ и (я понимаю, когда набирал его требуется 3 \ для отображения 2 \) что означает +? Если я хочу преобразовать его в Linux, должны ли быть изменения такими?

$file_directory =~ s/[^\\//]+$//;

Что касается последнего кода, мне нужно, чтобы кто-нибудь объяснил мне, что он делает. Спасибо.

1
RandyWong 4 Янв 2016 в 12:27

2 ответа

Лучший ответ

Это выражение

$ file_directory = ~ s / [^ \\\ /] + $ //;

Будет соответствовать всем символам после последней прямой или обратной косой черты и ничего не заменит. Обычно это заканчивается именем каталога. (Обратите внимание, что есть более безопасные способы сделать это, которые также являются кроссплатформенными. Например, Path :: Class.)

  • [^] - это класс символов с отрицанием, и он будет соответствовать чему-либо, не входящему в группу.
  • + дает одно или несколько совпадений
  • $ соответствует концу строки

Если я хочу преобразовать его в Linux, должны ли быть такие изменения?

Поскольку строка уже проверяет наличие обеих косых черт, рассматриваемый код должен работать для Linux как есть.

2
bolav 6 Янв 2016 в 11:18

Эти квадратные скобки ограничивают класс символов , что означает любой из перечисленных символов. Класс символов, начинающийся с ^, является инвертированным классом символов - он означает что-нибудь другое , кроме перечисленных.

Выражение:

[^\\\/]+$

Означает «один или несколько любых символов, кроме косой черты в конце ввода»

1
Bohemian 7 Янв 2016 в 23:14