Scanner - Regulärer Ausdruck

js-mueller

Erfahrenes Mitglied
Hi,

ich hab mein wieder ein Problem mit Regulären Ausrücken, ich glaub auf dem Gebiet werde ich nie klar kommen :/
Also ich habe eine Datei, welche folgendermaßen aufgebaut ist:

<!-- MSK-SKRIPT-A:test -->
<!-- MSK-SKRIPT-A:test2 -->
...
Ich möchte gerne alle Werte hinter dem : auslesen, sprich test,test2,testn.
Ich habe mir dazu folgenden Code überlegt, welcher aber nicht so funktioniert wie ich mir das wünsche, er selektiert nämlich alles vom ersten !-- MSK-SKRIPT-A: bis zum letzten --

Code:
Scanner scanner = new Scanner(this.jsMSK_maskePuffer).useDelimiter("<!-- MSK-SKRIPT-"+stelle+":\\s* -->");
        while(scanner.hasNext())
        {
        	System.out.println(scanner.next());
        }

Ich hoffe ihr könnt mir helfen, ich hab zum nachlesen "Java ist auch eine Insel", doch das hilft mir leider da nicht weiter :(
 
Hallo!

Code:
/**
 * 
 */
package de.tutorials;

import java.io.BufferedReader;
import java.io.FileReader;

/**
 * @author Tom
 *
 */
public class RegexFileProcessingExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new FileReader("test.txt"));
        String line;
        while((line = br.readLine())!=null){
            System.out.println(line.replaceAll("<!-- MSK-SKRIPT-A:([^ ]+)|(.*)","$1"));
        }
        br.close();
    }
}

test.txt:
Code:
<!-- MSK-SKRIPT-A:test -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test2 -->
<!-- MSK-SKRIPT-A:test3 -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test4 -->
<!-- MSK-SKRIPT-A:test12142 -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test -->
<!-- MSK-SKRIPT-A:test1424242 -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test331 -->
<!-- MSK-SKRIPT-A:test332 -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test442 -->
<!-- MSK-SKRIPT-A:test444 -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test5552 -->
<!-- MSK-SKRIPT-A:test55 -->
 dajaskjdas
<!-- MSK-SKRIPT-A:test662 -->

Ausgabe:
Code:
test

test2
test3

test4
test12142

test
test1424242

test331
test332

test442
test444

test5552
test55

test662

...oder so mit Scanner:
Code:
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.util.Scanner;

/**
 * @author Tom
 * 
 */
public class RegexFileProcessingExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(new File("test.txt"));
        while (scanner.hasNextLine()) {
            String line = scanner.nextLine().replaceAll(
                    "<!-- MSK-SKRIPT-A:([^ ]+)|(.*)", "$1");
            if ("".equals(line)) {
                continue;
            }
            System.out.println(line);
        }
        scanner.close();
    }
}

Ausgabe:
Code:
test
test2
test3
test4
test12142
test
test1424242
test331
test332
test442
test444
test5552
test55
test662

Gruß Tom
 
Hi,

danke für die Antwort, bin leider jetzt erst zum lesen gekommen.
So bei deiner Lösung habe ich aber ein Problem wenn ich das richtig sehe.
Ich habe nicht eine Datei, welche eingelesen werden muss, sondern einen String der verarbeitet werden muss; this.jsMSK_maskePuffer.
Das mit dem Zeihlenweise einlesen ist ja im Prinzip die Lösung für mein Problem, kann ich meinen Lösungsansatz umschreiben, so das er Zeilenweise agiert?
 
Hallo !

Es gibt auch die Möglich sich per JavaCC einen Parser generieren zu lassen. Ist vielleicht für dein Problem ein wenig mit Kanonen auf Spatzen geschossen, aber funktioniert super !
Habe mir damit schon viel Arbeit und Kopfschmerzen erspart !

Falls du Fragen haben solltest, sag Bescheid,

Krösi
 
Zurück