在jsp頁面中使用的EL表達式中,字符串是從字面上進行的。例如,在以下代碼片段中,在JSP中使用正則表達式EL
<c:when test="${myvar == 'prefix.*'}">
如果myvar的值是'prefixxxxx',則測試不會計算爲true。有誰知道是否有一種方法可以將字符串解釋爲正則表達式嗎? EL有類似awk的tilde〜操作符嗎?
在jsp頁面中使用的EL表達式中,字符串是從字面上進行的。例如,在以下代碼片段中,在JSP中使用正則表達式EL
<c:when test="${myvar == 'prefix.*'}">
如果myvar的值是'prefixxxxx',則測試不會計算爲true。有誰知道是否有一種方法可以將字符串解釋爲正則表達式嗎? EL有類似awk的tilde〜操作符嗎?
您可以使用JSTL功能,像這樣 -
<c:when test="${fn:startsWith(myVar, 'prefix')}">
請看:http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/fn/tld-summary.html
在這種特殊情況下可以用JSTL fn:startsWith
函數處理,一般的正則表達式看起來非常有可能測試。不幸的是,JSTL不包含這些功能。
在光明的一面,寫一個EL功能非常容易,它可以做你想做的事。您需要功能實現和一個頂級域名(TLD),讓您的Web應用程序知道在哪裏可以找到它。將它們放在一個JAR中,並放到WEB-INF/lib目錄中。
這裏有一個輪廓:
COM/X /標籤庫/核心/ 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>
對不起,我沒我不測試這個特殊的功能,但我希望能夠指出你正確的方向。
只需添加以下到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>
然後在你的JSP
<%@taglib uri="http://www.acme.com.au" prefix="custom"%>
custom:matches('aaa.+', someVar) }
這將工作完全一樣Pattern.match
最佳解決方案IMO! – 2015-08-18 15:09:44
聰明的解決方案!但是有可能返回匹配結果。我嘗試了一些java.util.regex.Matcher類,但我不知道如何使用tld語法... – user2718671 2016-05-10 11:54:39
使用模式。在我的情況下,在一個jsp頁面內匹配足以調用 java.util.regex.Pattern.matches(regexString,stringToCompare),因爲你不能導入package in jsp
這不回答op的(和我的)問題:_「有人知道是否有方法將字符串解釋爲正則表達式嗎?」_ – Madbreaks 2017-09-07 20:02:40