Montar uma Expressão Regular

Amigos preciso montar uma ER que busque a chave por exemplo “0000088C” e que traga tudo que estiver entre as tags e .

Buscando “0000088C” deve retornar apenas:

[code]

[/code]

Buscando “0000087C” deve retornar apenas:

[code]

[/code]

Texto Completo

<Package>
 <Header Reason="0" Id="198" Version="1.0"/>
 <Control Provider="" CPRDateTime="2012/02/08 11:58:32" Account="2" MsgId="211" Port="3000"/>
 <TCA ProductId="22" SerialNumber="0000087C" VersionId="0.1"/>
 <Datagram MsgType="STATE" MsgDateTime="2012/02/08 10:58:29"/>
 <GPS SatNum="8" Speed="68" DateTime="2012/02/08 10:58:28" NorthAngle="293.0" AltitudeStatus="VALID" PosIsValid="TRUE" Lat="-25.54156" Long="-48.68713" CableStatus="OK" Altitude="18"/>
 <Comm RSSI="0" GPSType="INTERNAL"/>
 <LinearInput Speed="0" Odometer="0" RPM="0" Temp1="127" BackBattery="40" Temp2="127" Temp3="127" MainBattery="26"/>
 <Input Movement="ON"/>
 <Output/>
 <Event Movement="ON" EventDateTime="2012/02/08 10:58:28"/>
</Package>

<Package>
 <Header Reason="0" Id="198" Version="1.0"/>
 <Control Provider="" CPRDateTime="2012/02/08 11:58:32" Account="2" MsgId="211" Port="3000"/>
 <TCA ProductId="22" SerialNumber="0000088C" VersionId="0.1"/>
 <Datagram MsgType="STATE" MsgDateTime="2012/02/08 10:58:29"/>
 <GPS SatNum="8" Speed="68" DateTime="2012/02/08 10:58:28" NorthAngle="293.0" AltitudeStatus="VALID" PosIsValid="TRUE" Lat="-25.54156" Long="-48.68713" CableStatus="OK" Altitude="18"/>
 <Comm RSSI="0" GPSType="INTERNAL"/>
 <LinearInput Speed="0" Odometer="0" RPM="0" Temp1="127" BackBattery="40" Temp2="127" Temp3="127" MainBattery="26"/>
 <Input Movement="ON"/>
 <Output/>
 <Event Movement="ON" EventDateTime="2012/02/08 10:58:28"/>
</Package>

<Package>
 <Header Reason="0" Id="198" Version="1.0"/>
 <Control Provider="" CPRDateTime="2012/02/08 11:58:32" Account="2" MsgId="211" Port="3000"/>
 <TCA ProductId="22" SerialNumber="0000087C" VersionId="0.1"/>
 <Datagram MsgType="STATE" MsgDateTime="2012/02/08 10:58:29"/>
 <GPS SatNum="8" Speed="68" DateTime="2012/02/08 10:58:28" NorthAngle="293.0" AltitudeStatus="VALID" PosIsValid="TRUE" Lat="-25.54156" Long="-48.68713" CableStatus="OK" Altitude="18"/>
 <Comm RSSI="0" GPSType="INTERNAL"/>
 <LinearInput Speed="0" Odometer="0" RPM="0" Temp1="127" BackBattery="40" Temp2="127" Temp3="127" MainBattery="26"/>
 <Input Movement="ON"/>
 <Output/>
 <Event Movement="ON" EventDateTime="2012/02/08 10:58:28"/>
</Package>

Alguém consegue montar esta ER, Obrigado!

Ai amigo vou te dar uma luz

http://www.youtube.com/watch?v=N4Bj-gPS0zQ&feature=BFa&list=PLA03DEA5320ECBF85&lf=plcp

Grd abraço

Eu tinha dificuldades da uma lida nesse livro e ve se fica mais claro!

http://aurelio.net/regex/guia/

Existem varias formas de se fazer esta expressão, mais uma delas seria algo do tipo :

Pattern.matches("0{5}8{2}C", param);

Abs,

[quote=dudzjava]Existem varias formas de se fazer esta expressão, mais uma delas seria algo do tipo :

Pattern.matches("0{5}8{2}C", param);

Abs,[/quote]

Vou dar uma estudada no link que o pessoal passou, esta ER que vc passou somente vai trazer o numero 0000088C, mas não é isso que eu quero, que quero que ele localize o 0000088C e devolva tudo que estiver antes dele até e tudo que estiver depois dele até como no exemplo que passei acima.

Amigos consegui progredir um pouco mas estou com uma duvida, no exemplo abaixo com o texto

[code]
stgt
0008890
gts45

dsadas 0008891 frgrg adsdas 0008890 54534 [/code]

Usando o Código

try { BufferedReader buff = new BufferedReader(new FileReader("c:\\MensagemEntrada.log")); StringBuilder texto = new StringBuilder(); String aux; while ((aux = buff.readLine()) != null) { texto.append(aux); } buff.close(); // String er = "<Package>(.|\\s)*00002B90(.|\\s)*(</Package>$|<Package>)"; String er = "<Package>\\w*0008891\\w*</Package>"; Matcher m = Pattern.compile(er).matcher(texto.toString()); List<String> result = new ArrayList<String>(); while (m.find()) { result.add(m.group()); } System.out.println("Size:" + result.size()); for (String t : result) { System.out.println(t); } } catch (Exception ex) { ex.printStackTrace(); }

Com a ER “\w0008891\w” tenho o seguinte resultado:

run: Size:1 <Package>dsadas0008891frgrg</Package> CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)

Este resultado está correto!
Mas ao mudar minha ER para “.0008891.” é retornado o seguinte:

Size:1 <Package>stgt0008890gts45</Package><Package>dsadas0008891frgrg</Package><Package>adsdas000889054534</Package>

Pergunto a vcs como buscar qualquer caráter entre o valor 0008891 sem influenciar no resultado, pois nas mensagens reais usar somente o \w não dá tem que ser qualquer carácter antes do 0008891 até o , e qualquer carácter depois do 0008891 até o .

Obrigado!