2016-05-17 13 views
1

Я пытаюсь создать регулярное выражение для проверки появления тегов сценариев на страницах jsp.Регулярное выражение, чтобы поймать тег scriplet

Вот регулярное выражение, которое я использую:

\<%(\s+)((.+?)(\n)*(\s+))*%> 

Проблема я столкнулся в том, что, хотя есть 3 отдельные экземпляры быть помечено в идеале, но мое регулярное выражение ослабевает все сразу.

Мое требование - указывать только отдельные экземпляры. И не промежуточные коды.

Вот тестовый код, который я использую, чтобы проверить мое регулярное выражение:

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

Может кто-нибудь помочь мне решить эту проблему?

+0

Каковы теги? Они то же самое, нужно больше описания. – ib11

+0

Мне просто нужно поймать появление «<% любых данных здесь%>». Каждое появление скриптлетов, независимо от того, какие данные имеются между начальным и конечным тегами –

ответ

0

Вот regex, что соответствует только теги:

(<%).*?(%>) 

Или вы хотите, чтобы вернуть только то, что находится между:

<%(.*?)%> 

Затем заменить в первой группе \1 сопрягать.

Если вы хотите, чтобы соответствовать . также новые линии, используйте модификатор (?s):

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

Demo здесь:

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

+0

Вышеописанное регулярное выражение ловит только те метки liner. Напр. <% out.print (session.getId()); %>. Но для случаев, когда в теге есть несколько строк, это становится неэффективным. Это именно то, что я ищу. Например, ниже код должен быть помечен <% Строковое имя = request.getParameter («имя пользователя»); session.setAttribute ("theName", name); % –

+0

@AnkitDas - OK, естественно. См. Править. – ib11

+0

Спасибо за решение. Это именно то, что я искал. :) –