Я хочу найти все экземпляры «index», за которыми не следует .php в журнале, используя less
. /index(?!\.php)
не работает. Это возможно? Что такое регулярное выражение для less и vim (они отличаются?). Разве это невозможно с соответствующими библиотеками регулярных выражений этих приложений?
vim
regular-expression
less
Грегг Левенталь
источник
источник
Ответы:
В
vim
, вы можете сделать так:Для получения более подробной информации, в командном режиме, попробуйте
:h \@
:источник
\@<!
\(some\)\@<!thing
будет соответствоватьthing
иeverything
иnothing
, но нетsomething
.(?!\.php)
является оператором регулярного выражения perl.less
обычно использует системный API регулярного выражения POSIX, поэтому обычно в расширенных регулярных выражениях GNU в системе GNUvim
используютсяvim
регулярные выражения.В
vim
, как уже показано cuonglm, эквивалентindex(?!\.php)
будетindex\(\.php\)\@!
или\vindex(\.php)@!
.Поскольку
less
во время компиляции вы можете выбрать библиотеку / API регулярных выражений и, как результат, тип регулярного выражения для использования:По умолчанию, однако,
less
будет использоваться POSIXregcomp
с REG_EXTENDED, поэтому вы получите расширенные регулярные выражения вашей системы, поэтому обычно что-то похожее сgrep -E
.В расширенном регулярном выражении GNU нет аналогичного оператора просмотра или просмотра вперед.
Вы могли бы сделать это трудным путем:
С помощью
less
вы можете использовать&
ключ для фильтрации строк, содержащихindex.php
(&!index\.php
), а затем искатьindex
(/index
). (вы все равно пропустите другие экземпляры,index
которые появляются в строке, также содержащейindex.php
).источник
less
зависит от времени компиляции.less
используетPCRE
, анализируя выводldd $(which less)
. Но с другой библиотекой, вы знаете какой-нибудь способ проверить?less --version
.less --verion
он печатает толькоless 444
вместе с авторским правом.