Beste Tweakers,
Als onderdeel van mijn onderzoek probeer ik de elementen van een serverlog per regel te categorizeren. Het leek me een goed idee om hiervoor een stukje Java te schrijven. Het probleem is dat niet elke regel even lang is of dezelfde elementen bevat, dus simpelweg de Scanner klasse toepassen is geen optie. Nu heb ik wat gegoogled en kwam ik de Pattern en Matcher klassen tegen. Hiermee kan ik a.d.h.v een regular expression nagaan of die regel een van de elementen die ik zoek bevat.
Allemaal leuk en aardig, alleen loop ik tijdens de toepassing tegen een (voor mij) bijzonder probleem aan. Als voorbeeld neem ik het IP adres. Zodra ik een regel uit de log lees (het IP adres komt op deze regel voor), wordt deze niet gematcht a.d.h.v. het patroon. Bijzonder is hierbij dat, wanneer ik de String rechtstreeks (dus letterlijk in de code geplakt) evalueer, zonder deze eerst uit het bestand te lezen, deze wel matcht. Het onderstaande stukje code illustreert mijn probleem:
Aangezien line geen match heeft met IPV4_PATTERN gooit m.group() een exception. Vervang line echter met "0.0.0.0" of enig ander IP adres en de code werkt. Hebben jullie enig idee wat hier gebeurt? Alvast bedankt voor jullie hulp!
Als onderdeel van mijn onderzoek probeer ik de elementen van een serverlog per regel te categorizeren. Het leek me een goed idee om hiervoor een stukje Java te schrijven. Het probleem is dat niet elke regel even lang is of dezelfde elementen bevat, dus simpelweg de Scanner klasse toepassen is geen optie. Nu heb ik wat gegoogled en kwam ik de Pattern en Matcher klassen tegen. Hiermee kan ik a.d.h.v een regular expression nagaan of die regel een van de elementen die ik zoek bevat.
Allemaal leuk en aardig, alleen loop ik tijdens de toepassing tegen een (voor mij) bijzonder probleem aan. Als voorbeeld neem ik het IP adres. Zodra ik een regel uit de log lees (het IP adres komt op deze regel voor), wordt deze niet gematcht a.d.h.v. het patroon. Bijzonder is hierbij dat, wanneer ik de String rechtstreeks (dus letterlijk in de code geplakt) evalueer, zonder deze eerst uit het bestand te lezen, deze wel matcht. Het onderstaande stukje code illustreert mijn probleem:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| public static final String IPV4_PATTERN = "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\b"; public static void convert(BufferedReader in, BufferedWriter out){ Pattern ip = Pattern.compile(IPV4_PATTERN); try { while(in.ready()){ Row r = new Row(); String line = in.readLine(); Matcher m = ip.matcher(line); r.setIP(m.group()); } catch (IOException e) { e.printStackTrace(); } } } |
Aangezien line geen match heeft met IPV4_PATTERN gooit m.group() een exception. Vervang line echter met "0.0.0.0" of enig ander IP adres en de code werkt. Hebben jullie enig idee wat hier gebeurt? Alvast bedankt voor jullie hulp!