Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

Регулярные выражения и поиск текста в Perl


Владислав Гошко

В данной статье я попытаюсь как можно лучше объяснить, что такое регулярные выражения в Perl. Изюминкой Perl является работа с текстом – для этого он и был создан. Регулярные выражения очень часто используются в Unix-системах, например, для поиска файлов по шаблону, также в sh, примеров много и все не перечислить, Perl не исключение.

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

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

Начнем с того, что в Perl имеются три основных оператора для работы с текстом:

n  m/.../   – проверка совпадений (matching)

n  s/.../.../ – подстановка текста (substitution)

n  tr/.../.../ – трансляция текста (translation)

 

также парочка полезных функций:

n  substr(EXPR,OFFSET,LEN,REPLACEMENT)

n  split(/PATTERN/,EXPR,LIMIT)

Оператор m/.../ пытается сопоставить шаблон, указанный в качестве аргумента, с текстом, с которым идет сравнение. Например:

$string = "Tasty Berry";

if ($string =~ m/berry/i){

    print "This is berry string!";

}

В данном случае будет выведена строка «This is berry string!». Для сравнения скаляра с шаблоном нужно использовать сравнение такого вида «=~».

Здесь операратор m/.../ вернет истину или ложь (т.к. данное регулярное выражение используется в скалярном контексте, а не в списковом – о нем ниже), если его опустить, то оператор m/.../ будет использовать специальную переменную $_.

Буква i после второй косой черты означает игнорирование регистра, как вы видите, в шаблоне написано «berry» а в $string – «Berry», т.е. если бы не было буквы i, то наша программа не вывела бы строку «This is berry string!». Шаблон m/berry/i совпадет со строками «BERRY», «berry», «BeRrY» и т. д.

$lines="";

open(FILE,"file.txt") or die $!;

while(<FILE>){

    if(/exit/i){

           last;

    }else{

           $lines.=$_;

    }

}

close(FILE);

Данная программа открывает файл и идет по строкам (по строкам, т.к. по умолчанию переменная $/ является переносом строки, переопределяя ее, вы меняете терминатор строки), сохраняя каждую строчку в переменную $lines, а если в строчке встречается слово «exit», то выходит из цикла.

Как вы уже успели заметить, я пропустил букву m в начале оператора: этот оператор используется очень часто и можно использовать его сокращенную форму – без первой буквы m.

Также поменять смысл на противоположный можно просто сменив оператор «=~» на «!~», например:

$string = "Tasty Berry";

if($string !~ /berry/i){

    print "This is NOT berry string!";

}else{

    print "This is berry string!";


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100