regex - pattern - regular expression replace
Usando expresiones regulares en JSP EL (4)
En expresiones EL, utilizadas en una página jsp, las cadenas se toman literalmente. Por ejemplo, en el siguiente fragmento de código
<c:when test="${myvar == ''prefix.*''}">
la prueba no se evalúa como verdadera si el valor de myvar es ''prefixxxxx''. ¿Alguien sabe si hay una manera de interpretar la cadena como una expresión regular en su lugar? ¿El EL tiene algo similar al operador de tilde ~ de awk?
Puede usar funciones JSTL como ese -
<c:when test="${fn:startsWith(myVar, ''prefix'')}">
Eche un vistazo: http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/fn/tld-summary.html
Si bien este caso especial se puede manejar con la función JSTL fn:startsWith
, las expresiones regulares en general parecen ser pruebas muy probables. Es desafortunado que JSTL no incluya una función para estos.
En el lado positivo, es bastante fácil escribir una función EL que hace lo que quiere. Necesita la implementación de la función y un TLD para que su aplicación web sepa dónde encontrarla. Colóquelos en un JAR y suéltelos en su directorio WEB-INF / lib.
Aquí hay un resumen:
com / x / taglib / core / Regexp.java:
import java.util.regex.Pattern;
public class Regexp {
public static boolean matches(String pattern, CharSequence str) {
return Pattern.compile(pattern).matcher(str).matches();
}
}
META-INF / xc.tld:
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>x-c</short-name>
<uri>http://dev.x.com/taglib/core/1.0</uri>
<function>
<description>Test whether a string matches a regular expression.</description>
<display-name>Matches</display-name>
<name>matches</name>
<function-class>com.x.taglib.core.Regexp</function-class>
<function-signature>boolean matches(java.lang.String, java.lang.CharSequence)</function-signature>
</function>
</taglib>
Lo siento, no probé esta función en particular, pero espero que sea suficiente para apuntar en la dirección correcta.
Simplemente agregue lo siguiente a WEB-INF / tags.tld
<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd">
<display-name>Acme tags</display-name>
<short-name>custom</short-name>
<uri>http://www.acme.com.au</uri>
<function>
<name>matches</name>
<function-class>java.util.regex.Pattern</function-class>
<function-signature>boolean matches(java.lang.String, java.lang.CharSequence) </function-signature>
</function>
</taglib>
Entonces en tu jsp
<%@taglib uri="http://www.acme.com.au" prefix="custom"%>
custom:matches(''aaa.+'', someVar) }
Esto funcionará exactamente igual que Pattern.match
para usar Pattern.matches dentro de una página jsp en mi caso fue suficiente llamar a java.util.regex.Pattern.matches (regexString, stringToCompare) porque no se puede importar el paquete en jsp