Reguläre Ausdrücke

TJava

Bekanntes Mitglied
Hallo ich durchsuche eine Datei nach einem Ausdruck.
Die Zeile soll diesen Asudruck enthalten
*.sql* würde ich in Windows schreiben

dann wenn diese Zeile gefunden ist soll er den String so trennen das

\namederdatei.sql herausgefiltert wird und in eine Variable gespeichert wird.

Java:
while (aktline != null) {
					try {
						inFile = new BufferedReader(new FileReader(scriptFiles[i]));
						aktline = inFile.readLine();
						if(aktline.matches("???"))
							
						String gefundeneDatei = aktline.???() STRING zerpflücker}}

Danke
 

Michael...

Top Contributor
Das geht leider nicht ich kenne ja den Namen der Datei nicht, der ist immer anders.
Das ist klar, sonst würdest Du ja nicht danach suchen ;-)
Aber Du kannst ja mit indexOf(".sql") - ohne RegEx - suchen und dann z.B. mit charAt(int i) rückwärts nach dem Dateitrenner suchen und Dir somit die notwendigen Indizes ermitteln, um dann mittels substring den gewünschten Textteil rauszulösen.

Ähnliche Problemstellungen gab es ja vor Java 1.4 auch schon ;-)

Falls Du mit Regex arbeiten willst Punkt und Backslash sind Metazeichen und müssen in dem Fall maskiert werden. Da der Backslash auch in Java ein Metazeichen ist musst Du hier die Maskierung auch noch maskieren.
 

Michael...

Top Contributor
Wie schauen die bisherigen Versuche denn aus?

Einfacher ist das Problem erst einmal separat anzugehen mittels Teststring ohne Dateieinlesen usw.

Beginnen könnte man mal so:
Java:
String test = "asqlsf\\sdgsdf.sqlsdfsqldf";
Pattern pattern = Pattern.compile("sql");
Matcher matcher = pattern.matcher(test);
while(matcher.find())
	System.out.println(matcher.group(0));
 

TJava

Bekanntes Mitglied
OK super das klappt und wie extrahiere ich nur einen bestimmten teil des String?

also name.sql und schmeiße den rest weg?
 

TJava

Bekanntes Mitglied
Java:
if (aktline.matches(".*\\.sf0.*")) {
							
							Pattern pat = Pattern.compile("\\.sf0");
							Matcher mat = pat.matcher(aktline);
							if(mat.find()){
							   System.out.println(mat.group(0));
							}

Mmhhh checke es nicht. also ich suche den String der zwischen \ und " steht und mit .sfo endet
k
 

Michael...

Top Contributor
Probiere es doch wie in meinen Vorschlag aus und baue das Pattern Stück für Stück aus.

Wie gesagt sind \ und . bei Regulären Ausdrücken Metazeichen. Der Punkt steht für ein beliebiges Zeichen und der Backslash dient zur Maskierung.

Wenn man also
Code:
\\.sf0
im Java Code als Pattern verwendet.
--> Steht es für den RegExp
Code:
\.sf0
(da der Backslash auch in Java ein Metazeichen ist)
--> Das heisst es wird nach der Zeichenkette
Code:
.sf0
gesucht.

Wie gesagt indexOf, charAt und substring sind einfacher anzuwenden als RegExp ;-)
 

TJava

Bekanntes Mitglied
Ja das merke ich auch :-D aber ich will es anwenden, sitze nun schon seit 8 uhr heute morgen am pc und programmiere. Mache morgen weiter muss jetzt noch ne Präsentation zaubern:rtfm:

Aber morgen werde ich weiter nerven
 

Crian

Top Contributor
Das Problem ist, dass
Code:
.matches(regex)
nur funktioniert, wenn der ganze String mit dem regulären Ausdruck beschrieben wird.

"Michael..." hat oben beschrieben, wie man es anders machen kann.
 

TJava

Bekanntes Mitglied
Guten Morgen liebe Javafreunde,

also ich suche _SF0_Datei_Einspielen($rootDir & "\Hilfsdateien\SF0-Dateien\datei1.sf0", 1)

mit Patternmatching
Java:
Pattern pat = Pattern.compile(".+sf0");

kann ich bisher das ganze so Filtern das

Java:
_SF0_Datei_Einspielen($rootDir & "\Hilfsdateien\SF0-Dateien\datei1.sf0

rauskommt.

Wie sage ich nun das ich ab dem / suche ==> datei.sfo??
 

Crian

Top Contributor
Vielleicht hilft dir folgendes zur Visualisierung des Problems?
Um es für dich lösen zu können, weiß ich zu wenig.

Java:
package forumProblems;

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpressionProblem {

    public static void main(String[] args) {
        String input = "foo bar _SF0_Datei_Einspielen"
            + "($rootDir & \"\\Hilfsdateien\\"
            + "SF0-Dateien\\datei1.sf0\", 1) baz";
        System.out.println("Eingabe: [" + input + "]");

        Pattern pattern = Pattern.compile(".+sf0");
        Matcher matcher = pattern.matcher(input);

        while (matcher.find()) {
            int start = matcher.start();
            int end   = matcher.end();
            System.out.println("Vor dem Fund : [" + input.substring(0, start) + "]");
            System.out.println("Fund         : [" + input.substring(start, end) + "]");
            System.out.println("Nach dem Fund: [" + input.substring(end) + "]");
        }
    }

}

Ausgabe:

Code:
Eingabe: [foo bar _SF0_Datei_Einspielen($rootDir & "\Hilfsdateien\SF0-Dateien\datei1.sf0", 1) baz]
Vor dem Fund : []
Fund         : [foo bar _SF0_Datei_Einspielen($rootDir & "\Hilfsdateien\SF0-Dateien\datei1.sf0]
Nach dem Fund: [", 1) baz]
 
Zuletzt bearbeitet:

AmunRa

Gesperrter Benutzer
Was ist mit dem hier?
Java:
		String s= "_SF0_Datei_Einspielen($rootDir & \"\\Hilfsdateien\\SF0-Dateien\\datei1.sf0\", 1)";
		String pattern = "\\\\([^\\\\]*?)\\.sf0";
		
		Pattern p = Pattern.compile(pattern);
		Matcher m = p.matcher(s);
		if (m.find()){
			System.out.println(m.group(1));
		}else{
			System.out.println("NOT FOUND");
		}
 

Michael...

Top Contributor
Sehen denn die relevanten Zeilen immer so aus?
Code:
blabla\blabla\blabla\blabla\blabla\gesuchteDatei.sf0
Dann ist Regex m.M. nach hier völlig überflüssig, wenn nicht sogar fehl am Platz.
Einfach die Zeilenstrings mit endsWith(".sf0") prüfen, ob sie relevante Informationen enthalten.
Wenn ja mittels substring(int i) und lastIndexOf("\\") den Dateinamen heraustrennen.
Lässt sich auf zwei Codezeilen reduzieren.
 

TJava

Bekanntes Mitglied
Es sieht halt meist so aus
Java:
_SF0_Datei_Einspielen($rootDir & "\Hilfsdateien\SF0-Dateien\datei1.sf0", 1)
 

TJava

Bekanntes Mitglied
hehe ich habe es jetzt mit Wenn ja mittels substring(int i) und lastIndexOf("\\") gelöst

Java:
System.out.println(aktline);
							System.out.println(aktline.lastIndexOf("\\"));
							System.out.println(aktline.lastIndexOf("\""));
							System.out.println(aktline.substring(aktline.lastIndexOf("\\")+1, aktline.lastIndexOf("\"")));

Ich hoffe das geht nun bei allen anwendungungsfällen
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
W Reguläre Ausdrücke Java Basics - Anfänger-Themen 1
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
K FYI: Reguläre Ausdrücke nutzen ja/nein Java Basics - Anfänger-Themen 2
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
P Reguläre Ausdrücke und Korrektheit Java Basics - Anfänger-Themen 2
0 Reguläre Ausdrücke bzw. Zahlenformat im String Java Basics - Anfänger-Themen 7
G Reguläre Ausdrücke Zeichenketten Java Basics - Anfänger-Themen 12
C Klassen Reguläre Ausdrücke auf Gleichheit prüfen Java Basics - Anfänger-Themen 5
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
C Reguläre-Ausdrücke Java Basics - Anfänger-Themen 5
J reguläre Ausdrücke Java Basics - Anfänger-Themen 1
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
H Erste Schritte Von jpg zu jpeg // reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
B Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
K Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
C Reguläre Ausdrücke: string.matches() und gefangene Gruppen Java Basics - Anfänger-Themen 12
S Reguläre Ausdrücke richtig einsetzten Java Basics - Anfänger-Themen 5
0 Reguläre Ausdrücke und Funktionen Java Basics - Anfänger-Themen 2
D Reguläre Ausdrücke Java Basics - Anfänger-Themen 3
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 16
A Reguläre Ausdrücke Frage Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke mit sehr variablen Eigenschaften Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke - bekomme Suchkriterium nicht hin Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke in Java Java Basics - Anfänger-Themen 2
J Reguläre Ausdrücke Java Basics - Anfänger-Themen 6
S Strings und reguläre Ausdrücke Java Basics - Anfänger-Themen 2
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 4
S Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre ausdrücke? Java Basics - Anfänger-Themen 8
D Reguläre Ausdrücke: Anzahl Wiederholungen als Variable? Java Basics - Anfänger-Themen 3
A Reguläre Ausdrücke Java Basics - Anfänger-Themen 2
M Reguläre Ausdrücke - maskieren von Zeichen? Java Basics - Anfänger-Themen 9
M Reguläre Ausdrücke und Ausgabe Java Basics - Anfänger-Themen 10
K Reguläre Ausdrücke - Gefundene Tokens direkt ermitteln Java Basics - Anfänger-Themen 3
J Reguläre Ausdrücke: Zeichenfolge ausschließen Java Basics - Anfänger-Themen 2
G Reguläre Ausdrücke Java Basics - Anfänger-Themen 13
L java und reguläre ausdrücke Java Basics - Anfänger-Themen 4
G Reguläre Ausdrücke zum Filtern von logfiles Java Basics - Anfänger-Themen 2
T Reguläre Ausdrücke? Java Basics - Anfänger-Themen 3
E Reguläre Ausdrücke Java Basics - Anfänger-Themen 17
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke der Pfade unter Windows und Unix Java Basics - Anfänger-Themen 3
N Reguläre Ausdrücke Java Basics - Anfänger-Themen 5
G Problem reguläre Ausdrücke Java Basics - Anfänger-Themen 4
A Reguläre Ausdrücke: Inhalt zwischen zwei Schlüsselwörtern Java Basics - Anfänger-Themen 2
A Reguläre Ausdrücke: Problem mit Backslash Java Basics - Anfänger-Themen 3
W Reguläre Ausdruck Java Basics - Anfänger-Themen 6
K Warum zeigt dieser reguläre Ausdruck true an? Java Basics - Anfänger-Themen 1
S reguläre Audrücke verbinden Java Basics - Anfänger-Themen 18
N reguläre ausdruech und exception Probleme Java Basics - Anfänger-Themen 7
R Reguläre Ausdruck definieren Java Basics - Anfänger-Themen 3
S Prüfungsvorbereitung Januar ( Thema Ausdrücke ) Java Basics - Anfänger-Themen 14
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
C Boolsche Ausdrücke Java Basics - Anfänger-Themen 3
A Schleifen und Boolsche Ausdrücke Java Basics - Anfänger-Themen 42
G Java Lambda Ausdrücke Java Basics - Anfänger-Themen 19
A Lambda-Ausdrücke Java Basics - Anfänger-Themen 6
G Lambda Ausdrücke Java Basics - Anfänger-Themen 2
O Lambda Ausdrücke in einem Comparator Java Basics - Anfänger-Themen 4
B Erste Schritte Boolesche Ausdrücke & Gesetze Java Basics - Anfänger-Themen 3
S Lambda Ausdrücke Streams Java Basics - Anfänger-Themen 6
D Variablen Ausdrücke Java Basics - Anfänger-Themen 6
M Lambda - Ausdrücke verstehen Java Basics - Anfänger-Themen 2
N Lambda Ausdrücke richtig schreiben Java Basics - Anfänger-Themen 4
F Methoden Lambda Ausdrücke Methodensignatur Java Basics - Anfänger-Themen 6
P Ausdrücke berechnen Java Basics - Anfänger-Themen 2
J Java 8 Lamda ausdrücke Java Basics - Anfänger-Themen 9
C Lambda Ausdrücke Java Basics - Anfänger-Themen 1
TheSorm Java 8 Lambda-Ausdrücke Java Basics - Anfänger-Themen 9
S Anweisungen Ausdrücke Java Basics - Anfänger-Themen 7
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
K Ausdrücke auswerten Java Basics - Anfänger-Themen 8
C Boolsche Ausdrücke - Wo ist mein Fehler? Java Basics - Anfänger-Themen 14
M Boolsche Ausdrücke minimieren Java Basics - Anfänger-Themen 13
S arithmetische Ausdrücke prüfen Java Basics - Anfänger-Themen 11
S Datentypen Operatoren und Ausdrücke (formel richtig rechnen) Java Basics - Anfänger-Themen 8
T Ausdrucksparser für Mathematische Ausdrücke Java Basics - Anfänger-Themen 15
N Ausdrücke Java Basics - Anfänger-Themen 6
W Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke Java Basics - Anfänger-Themen 3
C arithmetische Ausdrücke Java Basics - Anfänger-Themen 7
M regüläre Ausdrücke, die String - Variablen und Expression Java Basics - Anfänger-Themen 5
M Ausdrücke -> Werte Java Basics - Anfänger-Themen 6
A mehrere Ausdrücke in for schleife vergleichen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben