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:
1) comentário tipo 1 <!-- -->
2) comentário tipo 2 <%-- --%>
3) include tipo 1, <%@ include file = "anything" %>
4) include tipo 2, < jsp:include page = "anything" [flush = "true|false"] />
5) 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 ...
8-)
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: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 = "(<%@\\s*include\\s*file\\s*=\\s*\".*?\"\\s*%>)";
/* < jsp:include page = "anything" [flush = "true|false"] />
*/
protected static final String reInclude2 =
"(<\\s*jsp:include\\s*page\\s*=\\s*\".*?\"\\s*[flush\\s*=\\s*\".*?\"]*\\s*/>)";
/* < jsp:include page = "anything" [flush = "true|false"] >
* [<param />]
* < /jsp:include>
*/
protected static final String reInclude3 =
"((?-ms)<\\s*jsp:include\\s*page\\s*=\\s*\".*?\"\\s*[flush\\s*=\\s*\".*?\"]*\\s*[^/]*>\\s*[<param\\s*.*?/?>]*\\s*<\\s*/jsp:include\\s*?>)";
/**
* (<!--.*?-->)|
* (<%--.*?--%>)|
* (<%@\s*include\s*file\s*=\s*\".*?\"\s*%>)|
* (<\s*jsp:include\s*page\s*=\s*\".*?\"\s*[flush\s*=\s*\".*?\"]*\s*\/?>)|
* (<\s*jsp:include\s*page\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 //
);
<%@ 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" <!-- --> />
