Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
$string =~ s/!{8}//;
print $string;
Здесь мы удаляем ровно 8 восклицательных знаков, поэтому результат будет такой: It is some text?!!!!!!!!
Если мы добавим модификатор g, то и последние 8 восклицательных знаков тоже исчезнут, а вот если сделать 9 восклицательных знаков, тогда ничего не будет заменено...
Теперь о «жадности» квантификаторов: квантификатор заменит самую длинную серию – это и есть жадность.
Разберем такой пример, вы хотите заменить «That is» на «That's»:
# вероятно, вы сделате так:
$string = "That is reality, isn't it?";
$string =~ s/.*is/That's/;
print $string;
Результат будет такой: That'sn't it?
Так как «жадность» квантификаторов проявляется слева направо, т.е. будет выбрана максимальная серия слева направо. Это исправить легко – просто добавляем знак вопроса «?»:
$string =~ s/.*?is/That's/;
И теперь результат будет тот, что нужно: That's reality, isn't it? Вопросительный знак обозначает ноль или одно совпадение, поэтому как только найдено первое совпадение оно сразу заменяется, и все.
Вот список минимальных квантификаторов: +?, *?, ??, {}?.
Дальше несколько примеров с квантификаторами.
Удаляем начальные пропуски:
$string = " Some text";
$string =~ s/^s+//;
Удаляем конечные пропуски:
$string = "Some text ";
$string =~ s/s+$//;
А теперь классы и группы.
Класс символов – это символ, или список символов, заключенные в квадратные скобки. Любой символ из квадратных скобок сопоставляется со строкой для сравнения, например:
$string = "Berry";
if ($string =~ /[br]/){
print "B and R";
}
В данном случае оператор m/.../ используется в скалярном контексте, поэтому в случае совпадения шаблона возвращает истину, иначе пустую строчку. Знак дефис (-) имеет особый смысл для класса символов – диапазон символов (в начале указывается начальный символ, потом конечный), например:
$string = "some Text";
if($string =~ /[A-Z]/){
print "Uppercase here...";
}
Или вот другой пример:
# если есть буквы, то возвращает истину
$string = "some text";
if($string =~ /[A-Za-z]/){
print "Letters here...";
}
Здесь диапазон от A до Z заглавных букв, т.е. если в строчке есть хотя бы одна заглавная буква то оператор m/.../ возвращает истину. А если перед открывающей квадратной скобкой, поставить символ ^, тогда смысл меняется на противоположный, т.е. символ сравнивается, с любым не входящим в этот класс.
Вот пример:
$string = "abcdef";