Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
}
В данном случае будет выведена строка «This is berry string!». Но если нам немного поменять строку таким образом:
$string = "Tasty Strawberry";
Логически мысля, человек ищет строчку berry (с англ. ягода), но у нас в строчке strawberry (с англ. клубника), т.е. это нам не подходит, хотя наш шаблон все равно сработает и выведет «This is berry string!», хотя должен вывести «This is NOT berry string!». Это получается, потому что, когда оператор получает шаблон «berry» и другую строку, в которой он ищет символ «b», за которым следует «e», затем «r», «r» и «y», а все, что находится до этой последовательности или после нее, не имеет значения. Поэтому придется улучшить шаблон, подставив мнимый символ (об этих символах ниже), вот так:
$string = "Tasty Berry";
if($string !~ /berry/i){
print "This is NOT berry string!";
}else{
print "This is berry string!";
}
А вот сейчас все правильно – теперь наша программа выведет «This is NOT berry string!».
«» в начале шаблона – это мнимый символ, соответствующий границе слова. Как вы видите, некоторые символы имеют определенный смысл для регулярных выражений. Метасимволы могут создавать альтернативные значения, организовывать повторы, группировать (что позволяет запоминать часть найденной строки), создавать классы символов и т. д. Все метасимволы начинаются с обратной косой черты (). Если шаблон содержит символы косой черты (например, анализ каталогов, или HTML-тег), то лучше использовать другие ограничители, т.к. перед каждой чертой придется ставить обратную косую черту ().
Вот пример:
$string = "/usr/bin/perl";
# например, вы хотите заменить каталог /bin – на /local/bin
$string =~ s//bin//local/bin/ig;
Как видите, перед каждой косой чертой пришлось ставить обратную косую черту – некрасиво и очень громоздко, поэтому заменим разделитель (символы ? и ' лучше не использовать в качестве разделителей, т.к. шаблоны, ограниченные этими символами, обрабатываются иначе):
$string = "/usr/bin/perl";
$string =~ s%/bin%/local/bin%ig;
Или можно вот так:
$string =~ s|/bin|/local/bin|ig;
Или:
$string =~ s(/bin)(/local/bin)ig;
Или так:
$string =~ s{/bin}{/local/bin}ig;
Точно также можно использовать квадратные скобки. Эти же правила можно применять и для других операторов этого класса. Если вы успели заметить, я использовал еще один модификатор регулярных выражений, а именно g – он означает глобальную поиск и/или замену, например:
$string = "Some path /usr/bin/perl ...and another path usr/bin/perl";
$string =~ s%/bin%/local/bin%i;
print $string;
Вывод будет следующим:
Some path /usr/local/bin/perl
...and another path /usr/bin/per
Как вы видите, путь изменился только в первом совпадении с шаблоном, после этого наш оператор заканчивает работу, а вот если добавить модификатор g, тогда регулярное выражение будет сопоставляться до конца текста, т.е. глобально. После добавления модификатора g результат будет таков: