Множители.
* - ни одного или более экземпляров стоящего непосредственно перед ней символа.
+ - один или более экземпляров стоящего непосредственно перед нем символа.
? - ни одного или один экземпляр стоящего непосредственно перед ним символа.
Например, регулярное выражение /fo+ba?r/ обозначает символ f, за которым следует один или более символов o, затем символ b, затем ни одного или один символ a
и символ r.
$_ = "mike xxxxxxxxxxxxx nick" s/x+/igor/;
В последнем примере все символы x будут заменемы на igor (описанные выше образцы характеризуются
" прожорливостью "). Простой способ избежать этого - применение общего множителя.
/x{5,10}/ - найти символ, стоящий перед скобками, повторяющийся от пяти до десяти раз.
/x{5,}/ - найти символ, стоящий перед скобками, повторяющийся от пяти раз.
/x{5}/ - найти символ, стоящий перед скобками, повторяющийся ровно пять раз.
/x{,5}/ - найти символ, стоящий перед скобками, пять раз или менее.
/a.{5}b/ - соответствует букве a, отделенной от буквы b любыми пятью символами.
Если в одном выражении используются два множителя, то правило " прожорливости" дополняется правилом "чем левее, тем прожорливее ". Например:
$_ = "a xxx c xxxxxxxx c xxx d"; /a.*c.*d/;
Первая комбинация ".*" соответствует всем символам до второй буквы c.
Можно заставить любой множитель перестать быть "прожорливым", поставив после него вопросительный знак:
$_ = "a xxx c xxxxxxxx c xxx d"; /a.*?c.*d/;
Теперь a.*?c соответствует манимальному числу символов между a и c, а не максимальному.