Иллюстрированный самоучитель по Perl



         

Операция поиска - часть 2


Рассмотрим следующий скрипт.

$str="abaabbaaabbbaaaabbbb";

tt контекст массива, нет подобразцов в скобках

@result=$str =~m/a+b+/g;

print "контекст массива, нет конструкций в скобках:\n";

print "\@result=@result\n";

# контекст массива, есть конструкции в скобках, задающие обратные ссылки

@result=$Str =~m/(a+)(b+)/g;

print "контекст массива, есть конструкции в скобках:\n";

print "\@result=@result\n";

# скалярный контекст

print "скалярный контекст:\n";

while ($result=$str =~m/(a+)(b+)/g) {

print "result=$result, current match is $&, position=",pos($str),"\n"; }

Результатом его выполнения будет вывод:

контекст массива, нет конструкций в скобках:

@result=ab aabb aaabbb aaaabbbb

контекст массива, есть конструкции в скобках:

@result=a b aa bb ааа bbb aaaa bbbb

скалярный контекст:

result=l, current match is ab, position=2

result=l, current match is aabb, position=6

result=l, current match is 'aaabbb, position=12

result=l, current match is aaaabbbb, position=20

HI с — Используется совместно с флагом g. Отменяет восстановление начальной позиции поиска при неудачном поиске образца.

Рассмотрим скрипт

$str="abaabbaaabbbaaaabbbb";

while ($result=$str =~m/(a+)(b+)/g) {

print "result=$result, current match is $&, position=",pos($str),"\n";

} • print "last position=", pos($str), "\n";

Здесь поиск образца /а+ь+/ в строке $str осуществляется в цикле до первой неудачи. При последнем (неудачном) поиске начальная позиция поиска по умолчанию устанавливается в начало строки, в этом случае вывод имеет вид:

result=l, current match is ab, position=2 result=l, current match is aabb, position=6 result=l, current match is aaabbb, position=12 result=l, current match is aaaabbbb, position=20 last position=

Если глобальный поиск осуществлять при установленном флаге с:

while ($result=$str =~m/ (a+) (b+)/gc) {

то при последнем неудачном поиске начальная позиция поиска не переустанавливается. Вывод имеет вид:




Содержание  Назад  Вперед