Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
if($string =~ /[^abcde]+/){
print "In class";
}
В данном случае результат будет такой: In class
А если немного поменять $string:
$string = "abcde";
Тогда ничего не будет выведено, т.к. это и есть те символы, которых не должно быть...
А теперь давайте разберемся, что такое группа символов. С группами ассоциируются специальные переменные – $1, $2, $3, ... и т. д. (но до бесконечности, а не до девяти, как в JavaScript!). Разберем простой пример:
$string = "some_text 12345";
$string =~ /([a-z_]+)s+(d+)/g;
print "Text: $1 Numbers: $2";
Вот вывод программы:
Text: some_text
Numbers: 12345
Что-то заключенное в скобки – это группа, с которой ассоциируется специальная переменная вида $1 или ссылка на группу вида 1.
В первой группе диапазон строчных символов от a до z и символ подчеркивания (если вы хотите использовать дефис как символ в группе, а не как диапазон, то поставьте перед ним обратную косую черту). Со вложенными скобками также – на каждую открывающую скобку формируется специальная переменная (например, $1). Меняем местами слова при помощи оператора s/.../.../:
$string = "she loves me not";
# как видите, здесь четыре группы
$string =~ s/(w+)s+(w+)s+(w+)s+(w+)/$4 $3 $2 $1/g;
print $string;
Вот вывод нашей программы: not me loves she
Есть и такой вариант, без регулярных выражений:
$string = "she loves me not";
$string = join(" ",reverse split(" ",$string));
Результат такой же, как и в первый раз.
Также с помощью функции reverse можно проверить, является ли слово палиндромом:
$word = "reviver";
print $is_palindrome = ($word eq reverse($word));
Очень удобно работать с обработкой информации, например, от данных выхода какой-нибудь программы...
Рассмотрим более сложный пример:
# вот какие-нибудь входные данные
$string = " x = -15.32";
$string =~ ([a-z]+)s*=s*([+-]?d+.?d*)
/x;
В переменной $1 находится «x», а в переменной $2 – «-15.32». Теперь давайте разберемся, что к чему. В первой группе класс символов, т.е. диапазон символов от a до z строчных букв (начиная от одной буквы и более, т.к. используется квантификатор «+», квантификаторы действуют только на предыдущий символ, или класс символов). Далее, s* значит сколько угодно пробельных символов, или ни одного, затем символ «=», и опять же s*. После этого идет группа, в которой есть класс символов из «+» и «-», т.е. это значит, что символ «+» или «-» может присутствовать или не присутствовать (напомню: квантификатор «?» – ноль или одно совпадение).
Далее, d+ одно или сколько угодно чисел, затем точка или ее нет, а затем ноль или сколько угодно чисел.
А теперь чуть-чуть усложним нашу задачу, пусть данные будут такие (например, их вводил человек и допустил пару неточностей):
x = 15.1 y = 3. z = +12.22