Regular Expression

7 respostas
smota

Duas dúvidas sobre o tópico:

:arrow: Qual a RE para retornar true ao encontrar a palavra “native” com uma barra OU barra invertida antes e depois (o que tem depois/antes da barra nao faz diferenca)?!?

"teste/native/teste".matches(".*(/{1}+|\{1}+)native(/{1}+|\{1}+).*")

Esse é o código mais cabeludo que eu testei … comecei com variacoes mais simples mas nada de funfar … idéias?
Lembrando que "teste/native/teste".matches(".*native.*")acha a palavra native ignorando tudo antes/depois.
O problema é na barra \ porque o código "teste/native/teste"(".*/{1}+native/{1}+.*") encontra a construção.

:arrow: Olhando a API encontrei construções Reluctant quantifiers e Possessive quantifiers que fazem a mesma coisa, alguem tem na ponta da lingua a diferença? (tudo bem eu devia ir no google, mas to cansado agora :wink: )

7 Respostas

Rafael_Steil
[\///]native[\///]

Rafael

smota

Hein? Isso não é uma string válida :cry:

E mesmo alterando para "[\/]native[\/]" não encontra.
(a barra )

TedLoprao

Fiquei na dúvida, vc quer que ele ache essa string aaa//sdadas native fdsvfdvdf ??
Se sim me ocorreu essa solução:

[\\\\|/]+.*native.*[\|/]+

Não sei se é a melhor, mas acho que funciona :wink: , ou não??

Se quiseres achar somente se for assim asasa//nativedsvdsf ai use o seguinte:

[\\\\|/]+native[\|/]+

Acho que funciona tbm, :roll:

Fallow

smota

Eu quero encontrar a palavra native cercada de 1 barra (tanto faz se invertida ou não) ... eh um path e isso deve ser um diretório (nao serve um arquivo chamado native, nem um diretorio base chamado native).

Seu código nao funfa tb :cry: tá comecando a ficar xarope.

Escrevi um test case pra testar :
public class RegularExpressionTest extends TestCase {
	
	public void testNative() {
		String pattern = "[\|/]+native[\|/]+";
		String search;
		
		search = "not/found/test";
		assertFalse(search.matches(pattern));
		
		search = "not\found\test";
		assertFalse(search.matches(pattern));
		
		search = "not/found/test/native.jar";
		assertFalse(search.matches(pattern));

		search = "not\found\test\native.jar";
		assertFalse(search.matches(pattern));
		
		search = "native";
		assertFalse(search.matches(pattern));
		
		search = "native.jar";
		assertFalse(search.matches(pattern));
		
		search = "must/find/native/test";
		assertTrue(search.matches(pattern));
		
		search = "must\find\native\test";
		assertTrue(search.matches(pattern));
	}
}
TedLoprao

Hmmm, mas testei aqui o meu código e funfou!!!
Só faltou um .* de cada lado…

A, lembra que na setring que tu ta testando tem que botar duas \ pq senão ele entende que é um \t ou \n por exemplo!!!

Testei com esse formato

.*[\\\\|/]+native[\\\\|/]+.*

e encontrou, só que a string foi:

"lixo\\native/lixo"

Fallow

smota

É isso aeeeeeeeeeeeee …

o código final ficou

.*[\\|/]{1}+native[\\|/]{1}+.*

Só não entendi [b]porque \ ao invés de [/b]?

Muito obrigado pela força, valeu mesmo :stuck_out_tongue:

Rafael_Steil

Voce pode simplesmente usar

.*?[\\/]native[\\/].*?

vc tem que usar \ pq \ eh o caracter de escape.

Rafael

Criado 19 de fevereiro de 2004
Ultima resposta 20 de fev. de 2004
Respostas 7
Participantes 3