2012-01-28 23 views
6

En mi empresa, recientemente notamos que un desarrollador no usaba archivos de idioma, sino que ponía texto directamente en el código.Encontrando literales de cadena en mi código

Mi idea era buscar palabras entre comillas que tienen al menos 1 o más espacios en blanco en ellas. Pero me quedé con un poco

("|')(\w|\s{1,})*('|") 

este texto hace partido, pero no requiere que tiene al menos 1 palabra y al menos 1 espacio en blanco (para que coincida con casi cualquier cosa entre comillas). ¿Puede alguien ayudarme?

El idioma que quiero usar para esto es PHP (o lo que podía hacer una búsqueda Notepad ++)

+0

idioma que la programación? –

+0

Agregó el idioma a la pregunta – Rob

+0

¿Qué hay dentro de las citas de interés? ¿Algo más que palabras y espacios? ¿Se ven como '" foo bar baz "'? ¿Se permiten escapes? ¿Qué idioma es el código que estaba usando el desarrollador en cuestión (el código que está buscando)? – Qtax

Respuesta

2

Si desea hacer coincidir cadenas simples o dobles cotizados (sin fugas) que contienen una "palabra" y un espacio usted podría utilizar:

"(?=[^"\n]*\w)(?=[^"\n]*\s)[^"\n]+"|'(?=[^'\n]*\w)(?=[^'\n]*\s)[^'\n]+' 

En PHP que se vería así:

preg_match_all("/\"(?=[^\"\n]*\\w)(?=[^\"\n]*\\s)[^\"\n]+\"|'(?=[^'\n]*\\w)(?=[^'\n]*\\s)[^'\n]+'/", $string, $matches); 
+0

¡Gracias, funciona como un encanto! Para mal, no puedo leerlo todo pero necesito tomarme un tiempo para estudiar Regex pronto. El único problema ahora es que también toma todas las palabras entre literales. ¿Podría una búsqueda de EOL arreglar esto? – Rob

+0

+1, esperando que las cadenas no puedan contener escapes. Si pudieran, una expresión regular se volvería bastante desordenada. Retracté mi solución porque encontré cada vez más casos extremos en los que fallaría ... –

+0

@Rob, "también toma todas las palabras entre literales", ¿qué quieres decir? ¿Puedes dar algunos ejemplos? También es posible que desee cambiar todos esos '[^"] 'y' [^ '] 'a' [^ "\ n]' y '[^' \ n]' si las cadenas no abarcan varias líneas. @Tim, gracias. Y tienes razón, si hubiera escapes, probablemente sería mejor escribirlo de otra manera, más como la tuya. – Qtax

Cuestiones relacionadas