Восклицательный знак (!) включен в regex или шарик?

Во многих статьях они никогда не включали'!' в шарике, который является неправильным. Так, где делает! действительно принадлежите?

Я использовал! в шарике, например. ls lis[!ta]* делает это означает! часть шарика?

0
задан 26 April 2020 в 16:08

1 ответ

! используется и в шариках оболочки и в регулярных выражениях. Это не "принадлежит" также.

В примере, который Вы дали:

ls lis[!ta]*

это - POSIX способ инвертировать (или дополнить) класс символов. От man 7 glob

   Complementation

   An expression "[!...]" matches a single character, namely any character
   that is not matched by the expression obtained by  removing  the  first
   '!'  from it.  (Thus, "[!]a-]" matches any single character except ']',
   'a' and '-'.)

(некоторые оболочки также поддерживают ^ для образования дополнения, для непротиворечивости с синтаксисом регулярного выражения). Это также используется в расширенных шариках ksh/bash для подобной цели, напр.

!(foo|bar)

соответствия что-либо кроме foo или bar. Для этого использования обратитесь к странице руководства оболочки - в man bash например:

          ?(pattern-list)
                 Matches zero or one occurrence of the given patterns
          *(pattern-list)
                 Matches zero or more occurrences of the given patterns
          +(pattern-list)
                 Matches one or more occurrences of the given patterns
          @(pattern-list)
                 Matches one of the given patterns
          !(pattern-list)
                 Matches anything except one of the given patterns

В жемчуге совместимых регулярных выражениях (PCRE), ! также используется для отрицания lookarounds, как

foo(?!bar)

соответствовать foo кроме того, где это сопровождается bar. Посмотрите, например,

1
ответ дан 26 April 2020 в 19:14

Другие вопросы по тегам:

Похожие вопросы: