Руководство пользователя для GNU Awk
4. Регулярные выражения
4.6 Как много текста учитывается при определении соответствия?
Рассмотрим следующий пример:
echo aaaabcd -- awk '- sub(/a+/, "!A?"); print ""'
В нем используется функция sub (которую мы еще не обсуждали, см. раздел 12.3 [Встроенные функции для действий с цепочками], стр. 137) для изменения входной записи. Здесь regexp /a+/ означает "один или больше символов `a' " а замещающий текст есть `!A?'.
Ввод содержит четыре символа `a'. Каков будет результат? Другими словами, сколько "один или больше" будет учитывать awk, два, три или все четыре `a' ?
Ответ таков. Регулярные выражения в awk (и POSIX) всегда учитывают самую левую и самую длинную цепочку входных символов для соответствия. Поэтому в нашем примере все четыре символа `a' заменяются на `!A?'.
$ echo aaaabcd -- awk '- sub(/a+/, "!A?"); print ""'
a !A?bcd
Для простых тестов соответствует/не соответствует это не так важно. Но при обработке полей и расщеплении записей, при определении соответствия текстов и подстановок с помощью функций match, sub, gsub и gensub это очень важно. Понимание этого принципа также важно для опирающихся на regexp записей и разделения полей (см. раздел 5.1 [Как вход разделяется на записи], стр. 37, а также раздел 5.5 [Указание того, как разделяются поля], стр. 44).
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|