Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
reg.doc
Скачиваний:
1
Добавлен:
09.11.2019
Размер:
143.87 Кб
Скачать

Операция замены

s/ОБРАЗЕЦ/ЗАМЕНА/egimosx

Операция замены s/ / / осуществляет поиск ОБРАЗЦА и, в случае успеха, замену найденного фрагмента текстом ЗАМЕНА. Возвращаемым значением является число сделанных замен или пустая строка (ЛОЖЬ), если замен не было. По умолчанию поиск и замена осуществляются в специальной переменной $_. Ее можно заменить другой строкой при помощи операций связывания =~ или !~:

$var =~ s/ОБРАЗЕЦ/ЗАМЕНА/egimosx

Флаг g задает глобальную замену всех фрагментов, удовлетворяющих ОБРАЗЦУ, текстом ЗАМЕНЫ.

Флаг е означает, что заменяющий текст следует рассматривать как Perl-выражение, которое надо предварительно вычислить.

Например, в результате выполнения скрипта

$str="abaabbaaabbbaaaabbbb";

$result=$str =~s[(a+b+)]<length($l)>ge;

print "result=$result new str=$str\n";

будет выведено число сделанных замен $result и новое значение строки $str, в которой каждый найденный фрагмент, соответствующий образцу (a+b+), заменен числом, равным его длине:

result=4 new str=2468

Флаги imosx имеют тот же смысл, что для операции поиска m//.

Так же, как и в операции замены, в качестве ограничителей для выделения образца можно использовать любую пару символов, не являющихся цифрой, буквой или пробельным символом. Можно использовать различные ограничители для выделения образца и замещающего текста, например, s(pattern)<replacement>.

Операция транслитерации

tr/СПИСОК_ПОИСКА/СПИСОК_ЗАМЕНЫ/cds

Преобразует каждый символ из списка поиска в соответствующий символ из списка замены и возвращает число преобразованных символов. По умолчанию преобразования осуществляются в строке, задаваемой переменной $_. Как и в операциях поиска и замены, при помощи операций связывания =~ и ! ~ можно задать для преобразования строку, отличную от принятой по умолчанию

$str =~ tr/СПИСОК_ПОИСКА/СПИСОК_ЗАМЕНЫ/cds

Списки ПОИСКА и ЗАМЕНЫ задаются перечислением символов, могут содержать диапазоны — два символа, соединенных знаком "-", и иметь собственные символы-ограничители, например, # преобразование прописных букв в строчные

$str =~ tr/A-Z/a-z/;

Если флаг d не установлен и список замены короче, чем список поиска, то вместо недостающих символов в списке замены используется последний символ этого списка. Если список замены пуст, то символы из списка поиска преобразуются сами в себя, что удобно использовать для подсчета числа символов в некотором классе.

Флаги cds имеют следующий смысл.

с — в качестве списка поиска использовать все символы, кроме указанных.

Заменим на звездочки все символы, кроме строчных латинских букв:

$text = "Here is the text,";

$text =' tr/a-z/*/c;

print $text;

*ere*is*the*text*

d — удалить все символы, входящие в список поиска, для которых нет соответствия в списке замены.

Удаляем строчные латинские буквы и заменяем пробелы на слэши:

$text = "Here is the text.";

$text =~ tr[ a-z][/]d;

print $text;

H///.

s — все последовательности символов, которые были преобразованы в один и тот же символ, заменяются одним экземпляром этого символа.

Заменим слова, состоящие из латинских букв, на однократные символы косой черты:

$text = "Here is the text.";

$text =~tr(A-Za-z)(/)s;

print $text;

/ / / /.

Следующий скрипт преобразует русский текст в DOS-кодировке 866, содержащийся в файле "866.txt", в русский текст в Windows-кодировке 1251, и записывает преобразованный текст в файл "1251.txt".

open(IN866, "866.txt");

open(OUT1251,">1251.txt");

while ($line =<IN866>) {

$line=~tr/\200-\257\340-\361/\300-\377\250\270/;

print OUT1251 $line;

}

close(IN866);

close(OUT1251);

Содержимое файла 866.txt

ЏаҐ®Ўа §гҐв Є ¦¤л© бЁ¬ў®« Ё§ бЇЁбЄ  Ї®ЁбЄ  ў ᮮ⢥вбвўгойЁ© бЁ¬ў®« Ё§ бЇЁбЄ  § ¬Ґ­л Ё ў®§ўа й Ґв зЁб«® ЇаҐ®Ўа §®ў ­­ле бЁ¬ў®«®ў. Џ® 㬮«з ­Ёо ЇаҐ®Ўа §®ў ­Ёп ®бгйҐбвў«повбп ў бва®ЄҐ, § ¤ ў Ґ¬®© ЇҐаҐ¬Ґ­­®© $_. Љ Є Ё ў ®ЇҐа жЁпе Ї®ЁбЄ  Ё § ¬Ґ­л, ЇаЁ Ї®¬®йЁ ®ЇҐа жЁ© бўп§лў ­Ёп =~ Ё ! ~ ¬®¦­® § ¤ вм ¤«п ЇаҐ®Ўа §®ў ­Ёп бва®Єг, ®в«Ёз­го ®в ЇаЁ­пв®© Ї® 㬮«з ­Ёо

Содержимое файла 1251.txt

Преобразует каждый символ из списка поиска в соответствующий символ из списка замены и возвращает число преобразованных символов. По умолчанию преобразования осуществляются в строке, задаваемой переменной $_. Как и в операциях поиска и замены, при помощи операций связывания =~ и ! ~ можно задать для преобразования строку, отличную от принятой по умолчанию

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]