Регулярное выражение отрицательный взгляд

В моем домашнем каталоге у меня есть папка drupal-6.14, которая содержит платформу Drupal.

Из этого каталога я использую следующую команду:

find drupal-6.14 -type f -iname '*' | grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*' | xargs tar -czf drupal-6.14.tar.gz

Эта команда делает gzips папкуДрупал-6,14, исключая все подпапкиДрупал-6,14 / сайтов / кроме сайтов / всех и сайтов / по умолчанию, который включает в себя.

Мой вопрос по регулярному выражению:

grep -P 'drupal-6.14/(?!sites(?!/all|/default)).*'

Выражениеработает чтобы исключить все папки, которые я хочу исключить, но я неЯ не совсем понимаю, почему.

Это обычная задача с использованием регулярных выражений для

Сопоставить все строки, кроме тех, которыене содержать подшаблон х. Или, другими словами, отрицание подшаблона.

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

За эти годы япрочитал на них много сайтов. Руководства по регулярным выражениям PHP и Python, другие страницы, такие какhttp://www.regular-expressions.info/lookaround.html и так далее, но ямы никогдадействительно имел твердое понимание их.

Может ли кто-нибудь объяснить, как это работает, и, возможно, привести несколько похожих примеров, которые бы делали подобные вещи?

- Обновление один:

Относительно АндомараОтвет s: может ли двойной отрицательный прогноз быть более кратко выражен в виде одного положительного прогнозного заявления:

то есть

'drupal-6.14/(?!sites(?!/all|/default)).*'

эквивалентно:

'drupal-6.14/(?=sites(?:/all|/default)).*'

???

- Обновление два:

Согласно @andomar и @alan Moore - вы можетеt взаимозаменяемые двойные отрицательные взгляды на положительные.

Ответы на вопрос(3)

Ваш ответ на вопрос