2012-08-15 17 views
30

He intentado utilizar el Bloc de notas ++ Buscar/reemplazar con una expresión regular para reemplazar palabras específicas con versiones más cortas de esas palabras.


que utilizó la siguiente expresión regular para que coincida con cada palabra que termina con er (pero no er como una palabra) - y reemplazar las palabras coincidentes con las mismas palabras, menos el r final, utilizando una referencia inversa:

Find what:([a-zA-z]+e)r

Replace with:$1

Pero no reemplaza las palabras coincidentes, aunque las encuentre.

Sin embargo, si cambio la sintaxis de referencia inversa a esto:

Replace with:\1

Todo funciona bien.


¿Por qué no funciona el $1 referencia inversa?

¿Cuál es la diferencia entre las dos formas de retrotracción - \1 y $1?

Respuesta

32

Las versiones anteriores de Notepad ++ (v5.9.8 y anteriores) solo admiten el estándar POSIX Expresiones regulares. Sin embargo, lleno PCRE (expresiones regulares compatibles con Perl) Buscar/Reemplazar apoyo se añadió en la versión 6.0:

New features and enhancement in Notepad++ 6.0:

  • PCRE (Las expresiones regulares compatibles con Perl) es compatible.

Esto significa que si usted está utilizando Notepad ++ v6.0 o cualquier versión más reciente (por ejemplo v6.1.5), puede utilizar la sintaxis PCRE, y utilizar en lugar de $1\1 de referencia hacia atrás, pero ganaron No será compatible con versiones anteriores de Notepad ++ (anterior a la versión 6.0). Aparte de eso, son similares.

Para obtener más información sobre las diferencias entre la sintaxis de retroreferencia y las razones detrás del nuevo soporte de sintaxis, consulte Backreferences syntax in replacement strings (why dollar sign?).

Se puede encontrar un útil tutorial sobre cómo usar expresiones regulares en Notepad ++ here.

+3

@amiregelz He usado (y me gusta) el Bloc de notas ++ durante muchos años, pero una de las mayores frustraciones que he tenido ha sido su escasa compatibilidad con Regex.No puedo creer que haya estado en la oscuridad con estas mejoras durante DOS AÑOS. Referencias estándar, aserciones de ancho cero: ¡es hermoso! ¡Gracias por abrirme los ojos! –

Cuestiones relacionadas