Пример:
$s = «1+2-3*4»;
if ($s =~ /(d)(?!+)/) # Наити цифру за которой не стоит '+'
{
print «$1 »; # Результат '2'
}
else { print «ошибка поиска »;}
Правила регулярного выражения. (regex)
1. Любой символ обозначает себя самого если это не метасимвол. Если вам нужно отменить действие метасимвола то поставьте перед ним ''.
2. Строка символов обозначает строку этих символов.
3. Множество возможных символов (класс) заключается в квадратные скобки '[]' это значит что в данном месте может стоять один из указанных в скобках символ. Если первый символ в скобках это '^' – значит не один из указанных символов не может стоять в данном месте выражения. Внутри класса можно употреблять символ '-' обозначающий диаппазон символов. Например a-z один из малых букв латинского алфавита, 0-9 – цифра и т.д.
4. Все символы, включая специальные можно обозначать с помощью '' как в языке С.
5. Альтернативные последовательности разделяются символом '|' Заметьте что внутри квадратных скобок это обычный символ.
6. Внутри регулярного выражения можно указыват «подшаблоны» заключая их в круглые скобки и ссылаться на них как 'номер' Первая скобка обозначается как '1'.
*Операторы и приоритеты*
В Перл ассоциативность и приоритетность операторов аналогична языку C Ниже перечислены все операторы в порядке уменьшения приоритета, в начале строки указана ассоциативность.
ассоц. операторы
– –
левая термы и левосторонные списковые операторы
левая ->
– ++ –
правая **
правая ! ~ унарные + и -
левая =~ !~
левая * / % x
левая + – .
левая << >>
– именованные унарные операторы
– < > <= >= lt gt le ge
– == != <=> eq ne cmp
левая &
левая | ^
левая &&
левая ||
– ..
правая ?:
правая = += -= *= и т.д.
левая , =>
– правосторонние списковые операторы
левая not
левая and
левая or xor
Любой терм имеет самый высокий приоритет. К терму относятся переменные, кавычки и их операторы, арифметические и логические выражения в скобках, любые функции с параметрами в скобках. Фактически таких функций нет так как это просто унарные и списковые операторы просто они ведут себя подобно функциям с параметрами в скобках. Подробно смотри главу «Функции».
Если после любого спикового оператора ( print(), и т.д.) или унарного оператора (chdir(), и т.д.) следует левая круглая скобка, то операторы внутри скобок имеют наивысший приоритет. Так же как и обычные функции.
Если скобки отсутсвуют то приоритет списковых операторов или наивысший или наименьший в отношении операторов справа или слева от него.
Например:
@i = ('a ','b ', print 'c ', 'd ');
print « »,@i,' ';
Результат:
c d
a b 1
Здесь мы имеем списковый оператор print. Для запятых слева от него он имеет наименьший приоритет, но повышает приоритет правой запятой.
Поэтому правая запятая воспринимается как параметр для print и печатается 'c d' а левая просто записывает код завершения операции в массив @i и последний print показывает это.
Так же как в С или С++ это инфиксный оператор переадрессации. Если справа от него стоит [...] или {...} выражение, то правая часть может быть непосредственной или символической ссылкой на массив или хеш.
В противном случае правая сторона это метод или простой скаляр содержащий имя метода, а правая или объект или имя класса. Подробно смотри главу «Классы».
Эти операторы работают так же как и в С. Если оператор стоит перед переменной то значение переменной изменяется на 1 и полученной значение используется. Если после переменной то ее величина изменяется после применения.
Употребление инкремента к строковым переменным в Перл имеет одну особенность.
Каждый символ остается в своем классе (большие, малые, цифры) и учитывается перенос предыдущего символа. Таким образом строковые переменные с цифрами работают как числовые переменные.
Пример:
print ++($i = «09»); # Результат «10»
print ++($i = «a9»); # «b0»
print ++($i = «az»); # «ba»
print ++($i = «aZ»); # «bA»
Пример:
print 4**2 # Результат 16
print -4**2 # Результат -16 т.е. -(4**2)
'!' – логическое отрицание
'-' – арифметический минус
'~' – побитная инверсия (дополнение до 1)
'+' – арифметический плюс
'' – получение ссылки на переменную (как & в С)