Путаница с подстановочными символами и Regex - PullRequest
3 голосов
/ 24 августа 2009

Инициируется ответом .

  1. Как я могу использовать только Regex вместо подстановочных знаков?
  2. Где вам действительно нужны символы подстановки и глобализации, если вы можете использовать Regex?
  3. Были ли регулярные выражения из групповых символов или наоборот?

Ответы [ 3 ]

6 голосов
/ 25 августа 2009

Я думаю, что ваше замешательство основано на различиях между подстановочными символами, скрывающими оболочку (символ *) и символом регулярного выражения (символ *). Регулярные выражения не являются оболочечными, они гораздо более мощные и полезные, но для повседневного использования оболочек подстановочные знаки и оболочечные "достаточно хороши".

  1. Как я могу использовать только Regex вместо подстановочных знаков?

Не используйте оболочку. Напишите сценарий Perl / Python / Ruby / [your-choice-scripting-language-here], чтобы сделать эту работу за вас. Вероятно, будет быстрее, так как не нужно будет так много разветвляться.

  1. Где вам действительно нужны символы подстановки и глобализации, если вы можете использовать Regex?

Нет. Но в большинстве оболочек у вас нет регулярных выражений, поэтому у вас есть глобусы. Думайте о них как о регулярном выражении бедняка.

  1. Были ли регулярные выражения из групповых символов или наоборот?

Регулярные выражения взяты из теории множеств, в частности, ранних текстовых редакторов (один из ранних текстовых редакторов Unix под названием ed имел функцию, похожую на регулярные выражения, которая затем повторно использовалась в небольшой программе под названием grep, которую вы могли бы иметь слышал о). Я предполагаю, что подстановочные знаки были только особенностями раковины. Они не могут быть сложными для реализации, поэтому разработчики оболочки добавят их довольно быстро и с небольшими накладными расходами.

5 голосов
/ 24 августа 2009

Описано в справочной странице:

имя шаблона

Истина, если последний компонент изучаемого пути соответствует шаблону. В качестве части шаблона могут использоваться специальные символы соответствия шаблону оболочки ([, ], * и ?). Эти символы могут быть сопоставлены явным образом, если экранировать их обратной косой чертой (\).

Другими словами, шаблоны, которые можно использовать в шаблонах оболочки, могут использоваться find.

Справочные страницы обычно могут многое вам рассказать. ;)

$ man find

для получения дополнительной информации.

0 голосов
/ 24 августа 2009

У моего первоначального вопроса была неверная предпосылка; они подстановочные знаки, а не регулярные выражения! Glob-программа обрабатывает групповые символы.

Регулярные выражения

Обратите внимание, что шаблоны подстановочных знаков не являются регулярными выражения, хотя они немного аналогичный. Прежде всего, они совпадают имена файлов, а не текст, и во-вторых, конвенции не являются то же самое: например, в обычном выражение «*» означает ноль или более копии предыдущей вещи. Сейчас что регулярные выражения имеют скобку выражения, где отрицание обозначенный '^', POSIX объявил эффект шаблона подстановки «[^ ...]» не определено.

Объяснение не на 100% тщательное. Например, вы можете легко сопоставить имена файлов с Regex.

...