Quiero encontrar todas las instancias de "índice" no seguidas por .php en un registro usando less. /index(?!\.php)No funciona. es posible? ¿Cuál es la expresión regular para less y vim (¿difieren?). ¿No es esto posible con las bibliotecas de expresiones regulares respectivas de estas aplicaciones?
vim
regular-expression
less
Gregg Leventhal
fuente
fuente

Respuestas:
En
vim, puedes hacer así:Para más detalles, en modo comando, intente
:h \@:fuente
\@<!\(some\)\@<!thingcoincidirá conthingyeverythingynothing, pero nosomething.(?!\.php)es un operador perge regexp.lessgeneralmente usa la API de expresión regular POSIX del sistema, por lo que generalmente las expresiones regulares extendidas de GNU en un sistema GNUvimusanvimexpresiones regulares.En
vim, como ya se muestra por cuonglm, el equivalente deindex(?!\.php)seríaindex\(\.php\)\@!o\vindex(\.php)@!.Para
less, en el momento de la compilación, puede elegir la biblioteca / API de expresiones regulares y, como resultado, el tipo de expresiones regulares que se utilizará:Sin embargo, de manera predeterminada,
lessusará POSIXregcompcon REG_EXTENDED, por lo que obtendrá las expresiones regulares extendidas de su sistema, por lo que generalmente es algo similar a congrep -E.En GNU Extended regexp, no hay un operador equivalente de mirar hacia atrás o mirar hacia adelante.
Podrías hacerlo de la manera difícil:
Con
less, posiblemente podría usar la&tecla para filtrar las líneas que contienenindex.php(&!index\.php) y luego buscarindex(/index). (aún extrañaría las otras instanciasindexque aparecen en una línea que también contieneindex.php).fuente
lessutiliza depende del tiempo compilado.lessusaPCREanalizando la salida deldd $(which less). Pero con otra biblioteca, ¿conoce alguna forma de verificar?less --version.less --verion, solo imprimeless 444junto con Copyright.