2009-01-09 7 views

Respuesta

30

En Perl, que puede hacer:

$string =~ s/(some_regex)/lc($1)/ge; 

La opción /e provoca la expresión de reemplazo debe ser interpretado como código de Perl para ser evaluado, cuyo valor de retorno se utiliza como valor de sustitución final. lc($x) devuelve la versión en minúscula de $x. (No estoy seguro, pero supongo que lc() manejará caracteres internacionales correctamente en las versiones recientes de Perl.)

/g significa que coinciden globalmente. Omita g si solo desea un reemplazo único.

3

En Perl, hay

$string =~ tr/[A-Z]/[a-z]/; 
+1

que por supuesto no funciona para caracteres internacionales .. –

+0

¿El [A-Z]? Fue un ejemplo. Dicho eso, voté por la respuesta de j_random_hacker. –

2

implementaciones más expresiones regulares le permiten pasar de una función de devolución de llamada cuando se hace una sustituyen, por lo tanto, sólo tiene que devolver una versión en minúsculas del partido de la devolución de llamada.

+2

s/most/some/gi? – Rhubbarb

52

Si su versión de expresiones regulares lo soporta, puede usar \ L, al igual que en una cáscara de POSIX:

sed -r 's/(^.*)/\L\1/' 
+2

+1 para solución no Perl. Funciona en Kate: "\ L \ 1" –

+3

Parece que funciona en una cantidad sorprendente de kits de expresiones regulares, incluso si no se encuentra en un entorno similar a un caparazón. – Tim

+2

@Tim: De acuerdo, incluso Notepad ++ lo admite. –

12

Si está utilizando un editor como Sublime Text o TextMate , hay una buena probabilidad puede usar

\L$1 

como su reemplazo, donde $1 se refiere a algo de la expresión regular que se pone entre paréntesis. Por ejemplo, , aquí hay algo que utilicé para descifrar nombres de campos en algunos SQL, haciendo que todo esté a la derecha del 'como' al final de cualquier línea dada. En primer lugar el "hallazgo" expresión regular:

(as|AS) ([A-Za-z_]+)\s*,$ 

y luego la expresión de reemplazo:

$1 '\L$2', 

Si utiliza Vim (o presumiblemente gvim), entonces usted desea utilizar en lugar de \L\1\L$1, pero hay otra dificultad que deberá tener en cuenta: Vim revierte la sintaxis entre los caracteres de paréntesis literales y los caracteres de paréntesis escapados. Por lo tanto, para designar una parte de la expresión regular que se incluirá en el reemplazo ("capturado"), usará \( al principio y \) al final. Piense en \ como — en lugar de escapar de un carácter especial para convertirlo en literal — marcando el comienzo de un carácter especial (como en \s, \w, \b, etc.). Así que puede parecer extraño si no estás acostumbrado, pero en realidad es perfectamente lógico si piensas en ello de la manera Vim.


He probado esto en tanto TextMate y Sublime Text y funciona como está, pero algunos editores uso \1 en lugar de $1. Pruebe ambos y vea cuál usa su editor.

Acabo de sacar esta expresión regular de mi historial. Siempre modifico regexen mientras los uso, y no puedo prometer esto a la versión final, por lo que no estoy sugiriendo que sea adecuado para el propósito descrito, y especialmente no con SQL formateado de forma diferente al SQL en el que estaba trabajando, solo que es un ejemplo específico de downcasing en expresiones regulares. YMMV. UAYOR.

+0

Nice, Intellij IDEA también lo admite –

Cuestiones relacionadas