Estoy tratando de hacer coincidir el contenido entre <%.....%> en un código JSP. Supongamos que el código JSP de muestra es:
<%@ page import="java.io.*,java.util.*" %> <html> <head> <title>Auto Refresh</title> </head> <body> <fieldset style="width:20%; background-color:#e6ffe6;"> <legend>Auto refresh</legend> <h2>Auto Refresh Example</h2> <% // Set refresh, autoload time as 1 seconds response.setIntHeader("Refresh", 1); // Get current time Calendar calendar = new GregorianCalendar(); String am_pm; int hour = calendar.get(Calendar.HOUR); int minute = calendar.get(Calendar.MINUTE); int second = calendar.get(Calendar.SECOND); if(calendar.get(Calendar.AM_PM) == 0) am_pm = "AM"; else am_pm = "PM"; String CT = hour+":"+ minute +":"+ second +" "+ am_pm; out.println("Crrent Time: " + CT + "\n"); %> </fieldset> </body> </html> Mi expresión regular es /\<\%[\w \@\=\.\*\,\"\$\#\!\&\(\)\/\/\n\+\;\:]*\%\>/gi Solo coincide con la primera parte, es decir
<%@ page import="java.io.*,java.util.*" %>no es la segunda parte
<% // Set refresh, autoload time as 1 seconds response.setIntHeader("Refresh", 1); ........ String CT = hour+":"+ minute +":"+ second +" "+ am_pm; out.println("Crrent Time: " + CT + "\n"); %>Si suelta %> para la prueba, puede ver hasta qué punto coincide . Hasta la barra invertida en \n" porque no está incluida en el conjunto de caracteres especificado. Agregue la barra invertida o use algo más general como
/<%[\s\S]*?%>/g que coincidirá perezosamente con cualquier cantidad de cualquier carácter entre <% y %> .
Prueba esta expresión regular. Es corto y simple.
/<%.*?%>/gsExplicación
.*? coincide con cualquier carácter de cero a un número ilimitado de veces, la menor cantidad de veces posible (perezoso).
Entonces, toma todo entre <% y el %> . Preste atención al modificador /s de una sola línea