Help com uma regular expression

1 resposta
agodinho

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 = &quot;&quot;;

   protected static final String OR = &quot;|&quot;;

   /* &lt;!-- --&gt;
    */
   protected static final String reComment1 = "(&lt;!--.*?--&gt;)";

   /* &lt;%-- --%&gt;
    */
   protected static final String reComment2 = "(&lt;%--.*?--%&gt;)";

   /* &lt;%@ include file = "anything" %&gt;
    */
   protected static final String reInclude1 = "(&lt;%@\\s*include\\s*file\\s*=\\s*\".*?\"\\s*%&gt;)&quot;;

   /* &lt; jsp:include page = &quot;anything&quot; [flush = &quot;true|false&quot;] /&gt;
    */
   protected static final String reInclude2 =
      &quot;(&lt;\\s*jsp:include\\s*page\\s*=\\s*\&quot;.*?\&quot;\\s*[flush\\s*=\\s*\&quot;.*?\&quot;]*\\s*/&gt;)&quot;;

   /* &lt; jsp:include page = &quot;anything&quot; [flush = &quot;true|false&quot;] &gt;
    *    [&lt;param /&gt;]
    * &lt; /jsp:include&gt;
    */
   protected static final String reInclude3 =
      &quot;((?-ms)&lt;\\s*jsp:include\\s*page\\s*=\\s*\&quot;.*?\&quot;\\s*[flush\\s*=\\s*\&quot;.*?\&quot;]*\\s*[^/]*&gt;\\s*[&lt;param\\s*.*?/?&gt;]*\\s*&lt;\\s*/jsp:include\\s*?&gt;)&quot;;

   /**
    * (&lt;!--.*?--&gt;)|
    * (&lt;%--.*?--%&gt;)|
    * (&lt;%@\s*include\s*file\s*=\s*\".*?\"\s*%&gt;)|
    * (&lt;\s*jsp:include\s*page\s*=\s*\&quot;.*?\&quot;\s*[flush\s*=\s*\&quot;.*?\&quot;]*\s*\/?&gt;)|
    * (&lt;\s*jsp:include\s*page\s*=\s*\&quot;.*?\&quot;\s*[flush\s*=\s*\&quot;.*?\&quot;]*\s*[^/]*&gt;[&lt;param\s*.*?/&gt;]*&lt;\s*\/jsp:include\s*&gt;)
    */

   /*
    * 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 //
      );
o arquivo JSP para teste da RE:
&lt;%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%&gt;
&lt;%@ include file="/htmlHead.inc" + "2"
%&gt;
&lt;title&gt;Trash page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;%
String jspPage = "dynamic.inc";
%&gt;

     &lt;%@ include file="/file1.inc" %&gt;
     &lt;%@ include file="/file2.inc"
     %&gt;

     &lt; jsp:include page = &quot;file3.jsp&quot; flush = &quot;false&quot;
/&gt;

     Dammit! The jsp:include below is resolved at run-time, not at compile time
     as we initially thought.

     &lt; jsp:include page = &quot;file4.jsp&quot; flush = &quot;false&quot;
/&gt;

     &lt;%@ include file="/file5.inc"
     %&gt;

&lt;!--
     &lt;%@ include file="/file6.inc"
     %&gt;
     &lt; jsp:include page = "file3.jsp" flush = "false"
/&gt;
     &lt; jsp:include page = "/common/header.jsp" flush = "false" /&gt;
     &lt; jsp:include page = "/common/header.jsp" flush = "FaLse" /&gt;
     &lt; jsp:include page = "/common/header.jsp" flush = "TRUE" /&gt;
     &lt; jsp:include flush = "TRUE" page = "/common/header.jsp" /&gt;
     &lt; jsp:include page = "/common/header.jsp" /&gt;
--&gt;
     &lt;%@ include file="/file7.inc"
     %&gt;
     &lt; jsp:include page = &quot;file8.jsp&quot; flush = &quot;false&quot; /&gt;

     &lt; jsp:include page = &quot;/file9.jsp&quot; flush = &quot;false&quot; &gt;
        &lt;param /&gt;
     &lt; /jsp:include&gt;
lixo

     &lt; jsp:include page = &quot;&lt;%= jspPage %&gt;&quot; flush = &quot;false&quot; /&gt;

     &lt;jsp:include page = "/fileA.jsp" flush = "false"&gt;
        &lt;param /&gt;
        &lt;param /&gt;
        &lt;param /&gt;
        &lt;param /&gt;
        &lt;param /&gt;
     &lt;/jsp:include&gt;

     &lt;jsp:include page = "/fileB.jsp" flush = "false" &gt;&lt;/jsp:include&gt;

     &lt;jsp:include page = "/fileC.jsp" flush = "false" &gt;
     &lt;/jsp:include&gt;

     not supported!
     &lt;  &lt;!-- --&gt;  jsp:include &lt;!-- --&gt; page &lt;!-- --&gt; = &lt;!-- --&gt; "fileX.jsp" &lt;!-- --&gt; flush &lt;!-- --&gt; = &lt;!-- --&gt; "false" &lt;!-- --&gt; /&gt;

1 Resposta

agodinho

qualquer ajuda é bem vinda, please!
:cry:

Criado 10 de dezembro de 2008
Ultima resposta 10 de dez. de 2008
Respostas 1
Participantes 1