|
Исходники
Статьи
Языки программирования
.NET Delphi Visual C++ Borland C++ Builder C/С++ и C# Базы Данных MySQL MSSQL Oracle PostgreSQL Interbase VisualFoxPro Веб-Мастеру PHP HTML Perl Java JavaScript Протоколы AJAX Технология Ajax Освоение Ajax Сети Беспроводные сети Локальные сети Сети хранения данных TCP/IP xDSL ATM Операционные системы Windows Linux Wap Книги и учебники
Скрипты
Магазин программиста
|
Регулярные выраженияВ качестве примера можно привести такую задачу: нужно заменить в какой-либо строке все знаки "+" на пробелы. В воплощении на C это выглядело бы так: void PlusToSpace(char *str) {
register int i;
for (i=0;str[i];i++)
if(str[i]=='+')
str[i]=' ';
}
На Perl же эта задача выполняется гораздо быстрее: $str=~tr/+/ /; Именно это и дает Perl'у преимущество перед программами, например, на C, в применении в web-области. Формат выражения выглядит так: /pattern/где pattern и представляет собой маску, состоящую из любых элеменов из этого списка:
Это, конечно, не понять с первого раза, поэтому вот примеры:
Использование regular expressions=~ (проверка соответствия строки маске)Этот оператор выполняет функцию, схожую c функцией оператора ==, сравнивая переменную, содержащую строку с маской. Пример 1: $string="I love cgi";
if($string=~/cgi/) {
print "верно";
}
Пример 2: $string="chmod 755 test.cgi";
if($string=~/[a-z]+\s\d+\s.*/) {
print "верно";
}
# 'chmod' -- [a-z]+ - 1 или больше букв
# ' ' -- \s - 1 пробел
# '755' -- \d+ - 1 или больше цифр
# ' ' -- \s - 1 пробел
# 'test.cgi' -- .* - дальше идут любые символы
Пример 3: проверка, e-mail адреса $string="billgates@microsoft.com";
if($string=~/\w+\@\w+\.\w+/) {
print "верно";
}
# 'billgates' -- \w+ - 1 или больше букв/цифр
# '@' -- \@ - символ @
# 'microsoft' -- \w+ - 1 или больше букв/цифр
# '.' -- \. - символ .
# 'com' -- \w+ - 1 или больше букв/цифр
!~ (проверка несоответствия строки маске)Этот оператор является обратным оператору =~ (так же как != явл обратным по отношению к ==). tr (перевод)Аргументами этой функции эвляются две маски с одинаковым количеством элементов. $string=tr/SEARCHLIST/REPLACELIST/; А занимается она тем, что заменяет элемент из SEARCHLIST соответствующим элементом из REPLACELIST. Пример 1: $string="testing"; $string=~tr/et/ET; # Сейчас $string="TEsTing"; $string=~tr/a-z/A-Z/; # А сейчас $string="TESTING"; Пример 2: $string="I+like+CGI"; $string~tr/+/ /; # Сейчас $string="I Like CGI" s (замена)Эта функция заменяет часть строки, соответствующую PATTERN на REPLACE. $string=s/PATTERN/REPLACE/eg; Где 'e' и 'g' - необязательные параметры:
Пример 1: $string="i:love:perl"; $string=~s/:/*/; # now $string="i*love:perl" $string=~s/:/*/; # now $string="i*love*perl" $string=~s/*/+/g; # now $string="i+love+perl" $string=~s/+/ /g; # now $string="i love perl" $string=~s/perl/cgi/; # now $string="i love cgi" Пример 2: $string="i love perl"; $string=~s/(love)/<$1>/; # теперь $string="i Пример 3: $string="www22cgi44"; $string=~s/(\d+)/$1*3/eg; #сейчас $string="www66cgi132"; # Параметр 'e' показывает # что $1*2 - вычисление, а не просто строка /pattern/Работу этой функции поясняют примеры: Пример 1 $string="chmod 711 cgi"; $string=~/(\w+)\s+(\d+)/;
Теперь $1="chmod", $2="711" Пример 2: $string="chmod 711 cgi"; @list=split(/\s+/,$string); # разбить строку $string, # используя пробелы # в качестве разделителей Получим массив: @list=("chmod","711","cgi");
|
Форум Программиста
Новости
Обзоры
Магазин Программиста
Каталог ссылок
Поиск
Добавить файл
Обратная связь |