2010-08-03 19 views
12

estoy tratando de buscar todas las etiquetas de entrada HTML con un tipo de 'texto' dentro de Netbeans 6.9.Netbeans multilínea Expresión Regular

apoyo ofrece Netbeans búsqueda de cadena de utilizar expresiones regulares con diferentes criterios de búsqueda se extienden a través de múltiples líneas o sólo funcionan dentro de una sola línea?

Esta expresión regular

<input.*type=['"]text['"].*/> 

obras, cuando la etiqueta completa y sus atributos se escriben en una sola línea como esta

<input name="data[something]" id="some_id" value="some_value" type="text" /> 

Pero debido a que evite escribir largas líneas de código y rompen como such

<input name="data[something]" id="some_id" 
     value="some_value" type="text" /> 

la misma expresión regular no funciona.

¿Hay alguna manera esto podría lograrse?

Respuesta

20

Por defecto, el . metacarácter no coincide con saltos de línea. Debería haber una opción llamada "Single-line" o "DOTALL" o similar, que permite que el punto coincida con cada carácter. O puede agregar (?s) al comienzo de la expresión regular y obtener el mismo efecto para esa expresión regular.

Pero sería mejor reemplazar el .* con [^<>]*. En el modo DOTALL, .* intentará engullir todo el resto del documento, lo que provocará un rendimiento bajo y/o coincidencias incorrectas, pero [^<>]* nunca tratará de coincidir más allá del final de la etiqueta.

Por cierto, si usa ['|"] para hacer coincidir una comilla simple o una comilla doble, deshágase de |. "O" está implícito en una clase de caracteres, por lo que solo necesita ['"] (el | simplemente coincidiría con un literal |).

+0

Tengo un problema similar y su respuesta me ayudó. Pero apareció otro problema: mi expresión regular sigue siendo codiciosa. ¿Dónde puedo leer más sobre eso "(? S) al principio"? ¿Puedo hacer que mi expresión regular no codiciosa con eso? ¡Gracias! – Hnatt

+4

No importa, lo he encontrado. '(. *)' - codicioso, '(. *?)' - no codicioso. – Hnatt

+0

(? S) ayudó a encontrar coincidencias donde. (Punto) incluyó una nueva línea, ¡muchas gracias! – user219628