Tô apanhando pacas com uma regular expression que escrevi pra retornar todas as declarações de include que não estejam comentadas em um arquivo JSP.
Tenho, basicamente, 5 casos a tratar:
- comentário tipo 1 <!-- -->
- comentário tipo 2 <%-- --%>
- include tipo 1, <%@ include file = “anything” %>
- include tipo 2, < jsp:include page = "anything" [flush = "true|false"] />
- include tipo 3 < jsp:include page = "anything" [flush = "true|false"] > <param > < /jsp:include >
Estou tentando capturar essas declarações com uma única RE de forma tal que essa retorne o grupo (1-5) a qual pertence (na verdade são 5 REs, cada uma em um grupo distinto, divididas com OR), o java retorna o primeiro grupo que casar com a pesquisa.
A RE está funcionando para 1-4 mas não sei pq cargas dágua está bichando para o tipo 5. Tentei trabalhar com essa RE isoladamente e a mesma funciona, contudo qdo no grupo 5 (com OR) ela mela completamente …
Instalei o quickRex no meu eclipse aqui e a RE funciona direitinho no plugin com o JSP de teste listado abaixo, só que qdo rodo a mesma no java ela não volta o mesmo resultado (bug no quickRex?)
Tentei diversas configurações diferentes (?ms) para comentário 1 e 2 e (?-ms) para o include 1,2 e 3 e até agora nada …
Tô ficando careca e essa m não anda, então decidi pedir ajudar pros universitários …
Essa regular expression será utilizada num plugin que estou escrevendo (http://sourceforge.net/projects/jsprtools/) pra fazer refactoring de páginas jsp …
Please, alguma sugestão? algum Regular Expression master de plantão poderia por obséquio ajudar minha pobre alma???
Segue a RE:[code]
protected static final String EMPTY = "";
protected static final String OR = "|";
/* <!-- -->
/
protected static final String reComment1 = "(<!–.?–>)";
/* <%-- --%>
/
protected static final String reComment2 = "(<%–.?–%>)";
/* <%@ include file = “anything” %>
/
protected static final String reInclude1 = "(<%@\sinclude\sfile\s=\s*".?"\s%>)";
/* < jsp:include page = "anything" [flush = "true|false"] />
/
protected static final String reInclude2 =
"(<\sjsp:include\spage\s=\s*".?"\s[flush\s*=\s*".?"]\s*/>)";
/* < jsp:include page = "anything" [flush = "true|false"] >
* [<param />]
* < /jsp:include>
/
protected static final String reInclude3 =
"((?-ms)<\sjsp:include\spage\s=\s*".?"\s[flush\s*=\s*".?"]\s*[^/]>\s[<param\s*.?/?>]\s*<\s*/jsp:include\s*?>)";
/**
* (<!–.?–>)|
* (<%–.?–%>)|
* (<%@\sinclude\sfile\s*=\s*".?"\s%>)|
* (<\sjsp:include\spage\s*=\s*".?"\s[flush\s*=\s*".?"]\s*/?>)|
* (<\sjsp:include\spage\s*=\s*".?"\s[flush\s*=\s*".?"]\s*[^/]>[<param\s.?/>]<\s*/jsp:include\s*>)
*/
/*
* MUST be mutually exclusive.
*/
protected static final Pattern pInclude = Pattern.compile( //
reComment1 + OR + reComment2 + OR + reInclude1 + OR + reInclude2 + OR + reInclude3, //
Pattern.CASE_INSENSITIVE | Pattern.DOTALL | Pattern.MULTILINE //
);
[/code]
o arquivo JSP para teste da RE:[code]<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1” pageEncoding=“ISO-8859-1”%>
<%@ include file="/htmlHead.inc" + “2”
%>
<title>Trash page</title>
</head>
<body>
<%
String jspPage = “dynamic.inc”;
%>
<%@ include file="/file1.inc" %>
<%@ include file="/file2.inc"
%>
< jsp:include page = "file3.jsp" flush = "false"
/>
Dammit! The jsp:include below is resolved at run-time, not at compile time
as we initially thought.
< jsp:include page = "file4.jsp" flush = "false"
/>
<%@ include file="/file5.inc"
%>
<!–
<%@ include file="/file6.inc"
%>
< jsp:include page = “file3.jsp” flush = “false”
/>
< jsp:include page = “/common/header.jsp” flush = “false” />
< jsp:include page = “/common/header.jsp” flush = “FaLse” />
< jsp:include page = “/common/header.jsp” flush = “TRUE” />
< jsp:include flush = “TRUE” page = “/common/header.jsp” />
< jsp:include page = “/common/header.jsp” />
–>
<%@ include file="/file7.inc"
%>
< jsp:include page = “file8.jsp” flush = “false” />
< jsp:include page = "/file9.jsp" flush = "false" >
<param />
< /jsp:include>
lixo
< jsp:include page = "<%= jspPage %>" flush = "false" />
<jsp:include page = "/fileA.jsp" flush = "false">
<param />
<param />
<param />
<param />
<param />
</jsp:include>
<jsp:include page = "/fileB.jsp" flush = "false" ></jsp:include>
<jsp:include page = "/fileC.jsp" flush = "false" >
</jsp:include>
not supported!
< <!-- --> jsp:include <!-- --> page <!-- --> = <!-- --> "fileX.jsp" <!-- --> flush <!-- --> = <!-- --> "false" <!-- --> />
[/code]