Toon posts:

[Java] Data uit een string extracten (regex)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Java bied mij veel mogelijkheden tot regular expressions met zijn Pattern class, Matcher class en de vele methods in de String class. Maar toch lukt het mij niet om daadwerkelijk data uit een string te halen.

In PHP zou ik mijn probleem op de volgende wijze oplossen:

PHP:
1
preg_match_all("#([a-fA-F0-9]{2})-([a-fA-F0-9]{2}).*#Ui", $macaddress, $returnarray);


Het aanroepen van deze functie resulteert in de array "returnarray" waar, in dit geval, de eerste twee gedeelten van een MAC-adres in zullen staan.

Het is mij in Java prima gelukt dit voor elkaar te krijgen met booleans, dus of de regular expression "matched" of niet, maar ik krijg het niet voor elkaar om, zoals in dit geval, de eerste twee gedeelten van een MAC-adres terug te krijgen.

Kan iemand mij misschien helpen met een duw in de juiste richting? :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Wat is je code tot nu toe? Zonder code kunnen wij natuurlijk ook alleen maar gissen...
Trouwens, als ik Google kom ik zo op een kant-en-klaar voorbeeld uit.

[ Voor 54% gewijzigd door RobIII op 01-10-2007 00:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MetroidPrime
  • Registratie: Oktober 2003
  • Laatst online: 20-09 10:11

MetroidPrime

Turn it up loud, captain!

Met Matcher.group() kun je de inhoud van een capture group terughalen.

Java:
1
2
3
4
5
6
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(string);
if(m.matches()) {
   String firstPart = m.group(1);
   String secondPart = m.group(2);
}


De beide strings in dit voorbeeld bevatten nu de eerste twee delen van het MAC-adres.

"Some girl on the street outside the bar just asked me if I was saved yet." "Yeah? What did you say?" "I told her 'I saved at the checkpoint a couple of minutes back and I can reload from there if I die.'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op maandag 01 oktober 2007 @ 00:02:
Wat is je code tot nu toe? Zonder code kunnen wij natuurlijk ook alleen maar gissen...
Trouwens, als ik Google kom ik zo op een kant-en-klaar voorbeeld uit.
Op het moment heb ik geen code. Google heb ik uiteraard gebruikt, echter zag ik hierin niet de mogelijkheid om ook daadwerkelijk de data terug te vragen (zoals de OP state).
MetroidPrime schreef op maandag 01 oktober 2007 @ 00:07:
Met Matcher.group() kun je de inhoud van een capture group terughalen.

Java:
1
2
3
4
5
6
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(string);
if(m.matches()) {
   String firstPart = m.group(1);
   String secondPart = m.group(2);
}


De beide strings in dit voorbeeld bevatten nu de eerste twee delen van het MAC-adres.
Works like a charm. Bedankt :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op maandag 01 oktober 2007 @ 00:21:
Op het moment heb ik geen code. Google heb ik uiteraard gebruikt, echter zag ik hierin niet de mogelijkheid om ook daadwerkelijk de data terug te vragen (zoals de OP state).
Da's gek, in je vorige post zei je nog van wel :?
Verwijderd schreef op zondag 30 september 2007 @ 23:53:
Het is mij in Java prima gelukt dit voor elkaar te krijgen met booleans, dus of de regular expression "matched" of niet, maar ik krijg het niet voor elkaar om, zoals in dit geval, de eerste twee gedeelten van een MAC-adres terug te krijgen.
En precies hetgeen waar ik je naar verwees; echter leer je daar ook nog eens iets van in plaats van dat je copy/paste.

Overigens kun je "a-fA-F" vervangen door "a-f" (of "A-F") door je regex case-insensitive uit te laten voeren (en ook dat wordt in voorgenoemde pagina uitgelegd).

[ Voor 7% gewijzigd door RobIII op 01-10-2007 00:25 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op maandag 01 oktober 2007 @ 00:23:
[...]

Da's gek, in je vorige post zei je nog van wel :?


[...]


[...]

En precies hetgeen waar ik je naar verwees; echter leer je daar ook nog eens iets van in plaats van dat je copy/paste.

Overigens kun je "a-fA-F" vervangen door "a-f" (of "A-F") door je regex case-insensitive uit te laten voeren (en ook dat wordt in voorgenoemde pagina uitgelegd).
Om het dan ook maar gelijk in één klap duidelijk te maken: Ik heb de kennis wat betreft regular expression op het niveau dat ik hiervoor nodig heb, ik heb de kennis wat betreft Java om te begrijpen hoe je een regular expression toe kan passen, echter wist ik niet hoe je een resultset terug moest vragen.

Wat de case-sensitivity betreft: dit geef ik liever op dit niveau aan, aangezien de regular expression kan groeien, en je dan onnodig veel tijd bezig bent om alles weer terug naar case-sensitive terug te schakelen.
Pagina: 1