Perl - замена метасимволов регулярными выражениями
У меня проблемы при замене метасимволов с помощью регулярных выражений. Фраза, которую я хочу, чтобы регулярные выражения заменяли метасимвол:
ley+sobre+propiedad+literaria+1847
И код, который я использую, приведен ниже:
$file =~ s/\+/\s/; # --> Replace the +
Но, похоже, он заменяет только первый метасимвол, и в результате получается:
leysobre+propiedad+literaria+1847
Что я должен использовать?
3 ответа
\s
является классом символов и не является допустимым экранированием для строк. Вторая часть замещения берется как строка.- Чтобы заменить все вхождения ("глобально"), используйте
/g
включить замену. - Односимвольные транслитерации также могут использовать
tr///
оператор.
Предполагая, что вы хотите заменить +
пробелом:
tr/+/ /;
или же
s/\+/ /g;
Если вы хотите декодировать URL-адреса:
use URL::Encode 'url_decode';
my $real_filename = url_decode $file;
См. Документацию для URL:: Encode для получения дополнительной информации.
Ваша проблема не связана с метасимволами. Замена s///
заменяет только первое вхождение шаблона, если не указано заменить все из них /g
вариант.
КСТАТИ, \s
интерпретируется как простой s
в запасной части. Если ты хочешь \s
, вы должны указать \\s
для обратной косой черты (как в двойных кавычках). Таким образом, результат на самом деле
leyssobre+propiedad+literaria+1847
Обратите внимание на двойной s
,