Regex模式,以匹配JSP代码中的java部分



我正在尝试匹配<%…..%之间的内容>在JSP代码中。假设示例JSP代码是:

<%@ 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>

我的正则表达式是/<%[w @=.*,"$#!&()//n+;:]*%>/gi它只匹配第一部分,即

<%@ page import="java.io.*,java.util.*" %>

不是的第二部分

<%
// Set refresh, autoload time as 1 seconds
response.setIntHeader("Refresh", 1);
........
String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
out.println("Crrent Time: " + CT + "n");
%>

如果您放弃%>进行试用,您可以看到它的匹配程度。直到n"处的反斜杠,因为它没有包含在指定的字符集中。添加反斜杠或使用更通用的东西,如

/<%[sS]*?%>/g

其将延迟地匹配CCD_ 4和CCD_。

在regex101 上查看此演示

试试这个正则表达式。它又短又简单。

/<%.*?%>/gs

演示

解释

.*?匹配从零到无限次数的任何字符,尽可能少的次数(惰性(。

因此,它获取<%和最近的%>之间的所有内容。注意单线修改器/s

最新更新