Estou fazendo um Script em Groovy em que varro os JSP’s em busca das tags cujo atributo “src” comece com a String “/WBCM/”. Em Expressão regular isso fica assim:
Bem, agora eu quero o contrário: tags cujo atributo “src” não comece com a String “/WBCM/”, o que retornaria o contrário dos resultados acima. Em nenhum lugar achei como fazer isso. Seja no javadoc da classe Pattern, seja aqui. Então “chutei” a seguinte expressão:
/<img.*src=['"][^(\/WBCM\/)][^>]*>/
Mas não funcionou como queria, pois do segundo de tags acima retornou positivo apenas para <img src=’<tiles:getAsString name=“icone”/>. Alguém tem idéia melhor?
As expressões regulares básicas/extendidas não possuem recurso de negar uma sequencia. Vc pode negar uma lista de caracteres apenas.
Contudo, a implementação de ERs do Java suporta alguns recursos alem
Special constructs (non-capturing)
(?:X) X, as a non-capturing group
(?idmsux-idmsux) Nothing, but turns match flags on - off
(?idmsux-idmsux:X) X, as a non-capturing group with the given flags on - off
(?=X) X, via zero-width positive lookahead b X, via zero-width negative lookahead[/b]
(?<=X) X, via zero-width positive lookbehind b X, via zero-width negative lookbehind[/b]
(?>X) X, as an independent, non-capturing group
Para complementar, achei esse site em português. À parte o tom talvez excessivamente informal, ele se mostrou muito útil. Em especial a resposta à minha pergunta: Há como negar uma ou mais palavras, em apenas alguns aplicativos.