Глава 7: Регулярные выражения.
7.3 Образцы
7.3.5 Фиксирование образцов
Некоторые особые виды записи позволяют фиксировать образец относительно позиции в строке, в которой ищется соответствие. Обычно при сопоставлении образец "перемещается" по строке слева направо; сообщение о совпадении дается при первой же возможности. Фиксирующие точки позволяют гарантировать, что с образцом совпадают определенные части сравниваемой строки.
Первая пара фиксирующих директив требует, чтобы определенная часть символов, соответствующих образцу, была расположена либо на границе слова, либо не на границе слова. Фиксирующая директива \b требует, чтобы совпадение с образцом b происходило только на границе слова. Граница слова — это место между символами, которые соответствуют предопределенным классам \w или \w, либо между символами, которые соответствуют классу \w, а также начало или окончание строки. Отметим, что все это больше предназначено для работы с С, а не с английскими словами, но вполне применимо и к словам. Например:
/fred\b/; # соответствует слову fred, но не Frederick
/\bmo/; # соответствует словам тое и mole, но не Eimo
/\bFred\b/; # соответствует слову Fred, но не Frederick или alFred
/\b\+\b/; # соответствует "х+у", но не "++" или " + "
/abc/bdef/; # никогда не дает совпадения(границы там быть не может)
Аналогичным образом \в требует, чтобы в указанной точке границы слова не было. Например:
/\bFred\B/; # соответствует "Frederick", но не "Fred Flintstone"
Две другие фиксирующие точки требуют, чтобы определенная часть образца стояла рядом с концом строки. Символ ^ обозначает начало строки, если стоит в месте, где сопоставление с началом строки имеет смысл. Например, ^а соответствует символу а в том и только в том случае, если а — первый символ в строке, a^ соответствует двум символам, а и ^, стоящим в любом месте строки. Другими словами, символ ^ утратил свое специальное значение. Если вы хотите, чтобы он имел буквальный смысл и в начале строки, поставьте перед ним обратную косую черту.
Символ $, как и ^ , фиксирует образец, но не по началу, а по концу строки. Другими словами, с$ соответствует символу с только в том случае, если он стоит в конце строки*. Знак доллара в любом другом месте образца, вероятно, будет интерпретироваться как представление скалярного значения, поэтому для того, чтобы использовать его в строке буквально, перед ним следует поставить обратную косую.
Поддерживаются и другие фиксирующие точки, включая \А, \2 и упреждающие фиксирующие точки, создаваемые с помощью комбинаций (?=...) и (?!...). Они подробно описаны в главе 2 книги Programming Perl и на man-странице perlre(Y).