正则表达式捕获scriplet标记

时间:2016-05-17 07:15:12

标签: jsp session scriptlet

我正在尝试创建一个正则表达式来检查jsp页面中scriptlet标记的出现。

这是我正在使用的正则表达式:

<%@ page import="java.io.*,java.util.*" %>
<%
  // Get session creation time.
   Date createTime = new Date(session.getCreationTime());
   // Get last access time of this web page.
   Date lastAccessTime = new Date(session.getLastAccessedTime());

   String title = "Welcome Back to my website";
   Integer visitCount = new Integer(0);
    String visitCountKey = new String("visitCount");
   String userIDKey = new String("userID");
   String userID = new String("ABCD");

   // Check if this is new comer on your web page.
   if (session.isNew()){
     title = "Welcome to my website";
      session.setAttribute(userIDKey, userID);
       session.setAttribute(visitCountKey,  visitCount);
   } 
    visitCount = (Integer)session.getAttribute(visitCountKey);
  visitCount = visitCount + 1;
  userID = (String)session.getAttribute(userIDKey);
  session.setAttribute(visitCountKey,  visitCount);
 %>
<html>
 <head>
 <title>Session Tracking</title>
 </head>
 <body>
 <center>
 <h1>Session Tracking</h1>
</center>
<table border="1" align="center"> 
<tr bgcolor="#949494">
   <th>Session info</th>
  <th>Value</th>
 </tr> 
 <tr>
   <td>id</td>
   <td><% out.print( session.getId()); %></td>
</tr> 
  <tr>
   <td>Creation Time</td>
   <td><% out.print(createTime); %></td>
  </tr> 

  </table> 
 </body>
 </html>

我在这里遇到的问题是,虽然理想情况下有3个单独的实例被标记,但我的正则表达式会立即标记它。

我的要求是仅标记各个实例。而不是中间代码。

以下是我用来测试我的正则表达式的测试代码:

sleep()

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

以下是仅与标记匹配的regex

(<%).*?(%>)

或者您只想返回介于两者之间的内容:

<%(.*?)%>

然后替换为匹配的第一组\1

如果您希望.也匹配新行,请使用(?s)修饰符:

(?s)<%(.*?)%>

在这里演示:

https://regex101.com/r/jX9bX0/8