Каковы различия между шаблоном стиля glob и регулярным выражением?
Я сталкивался с ситуациями, когда поддерживаются только шаблоны в стиле glob и отсутствует полная поддержка регулярных выражений, например, ключи redis. Я хотел бы знать разницу между ними. Кроме того, меня удивляет, является ли реализация алгоритма сопоставления регулярных выражений более сложной по сравнению с шаблоном в стиле глобуса, когда некоторые программы вообще не поддерживают регулярные выражения?
2 ответа
Традиционные глобальные подстановочные знаки поддерживают очень узкий набор метасимволов - *
это "что-нибудь", ?
произвольный одиночный символ; Bourne shell также поддерживает [a-z123]
для одного символа из набора альтернатив, и [!x-z789]
любой, кроме перечисленных.
Очевидно, что Regex гораздо богаче, поддерживает повторения и (в ERE) чередование и определенное количество повторений. Регулярное выражение в стиле Perl расширяет формализм до такой степени, что было написано несколько книг, и будет еще больше.
Базовое регулярное выражение не намного сложнее в программировании, чем глобальные подстановочные знаки, и в наши дни компетентный программист в любом случае будет ссылаться на существующую библиотеку.
Многие более простые системы не хотят обременять своих пользователей сложностью изучения регулярных выражений - даже простые подстановочные знаки являются проблемой, которую нужно объяснить среднестатистическому специалисту по продажам, который не является постоянным пользователем компьютера.
Регулярные выражения используются в командах / функциях для сопоставления с образцом в тексте. Например, в параметре шаблона grep или в языках программирования.
Globbing используется оболочками для сопоставления имен файлов и каталогов с использованием подстановочных знаков. Возможности сглаживания зависят от оболочки. Bash, например, поддерживает подстановочные знаки, такие как:
Более подробную информацию можно найти здесь