Regex Ausdrücke im Array - Wieso werden sie nicht erkannt?

javaKueken

Mitglied
Ich habe den folgenden Code geschrieben:

Java:
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.xml.sax.SAXException;

public class MatcherClass
{
	public static void main(String args[]) throws XPathExpressionException,
			ParserConfigurationException, SAXException, IOException
	{
		String[] regexes = new XMLwork().xmlRenameOld();
		String[] replacement = new XMLwork().xmlRenameNew();
		String candidateString = "darf ich an dieser Stelle nicht nennen";

		Pattern p = Pattern.compile(regexes[0]);
		Matcher matcher = p.matcher(candidateString);
		String tmp = matcher.replaceAll(replacement[0]);
		System.out.println(candidateString + "\n" + "replace: " + tmp);

	}
}

Es gibt zwei Arrays in den sich jeweils die Regex befinden und im anderen Array der Replace-Ausdruck.
z.B.
In
Java:
regexes[0]="(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,}\\d{1,})--(\\d{1,})-(\\d{1,})_(\\w{1,})(.\\w{1,})"
gespeichert und in
Java:
replacement[0]="$1+$5+20$2+$4+$10$11"
gespeichert. Übrigens seht ihr in
Java:
regexes[0]
jedesmal ein Doppel-Backslash, was richtig ist, da es sich um Java handelt.

Wenn ich die Ausdrücke so schreibe:
Java:
Pattern p = Pattern.compile("(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,}\\d{1,})--(\\d{1,})-(\\d{1,})_(\\w{1,})(.\\w{1,})");
und
Java:
String tmp = matcher.replaceAll("$1+$5+20$2+$4+$10$11");

Funktioniert alles wunderbar.
Wenn ich es so wie oben programmiere, quasi den Wert im Array per Index auslese, funktioniert es nicht.
Warum nicht?
Habt ihr eine Idee?

PS: Den candidateString darf ich hier nicht nennen. Aber die Expressions passen und sind korrekt um den original candidateString zu erkennen.
 

Michael...

Top Contributor
Funktioniert alles wunderbar.
Wenn ich es so wie oben programmiere, quasi den Wert im Array per Index auslese, funktioniert es nicht.
Warum nicht?
Habt ihr eine Idee?
Vielleicht weil die Ausdrücke im Array falsch drin stehen? Einfach mal den Regulären Ausdruck für beide Varianten per System.out. ausgeben und vergleichen

Hab den RegEx nur überflogen, aber da steckt sicherlich noch Potential drin. z.B. statt
Code:
{1,}
kann man auch einfach
Code:
+
schreiben, die Gruppen schein mir auch überflüssig.

String bietet im übrigen selbst eine Methode replaceAll(...)
 

javaKueken

Mitglied
Vielleicht weil die Ausdrücke im Array falsch drin stehen? Einfach mal den Regulären Ausdruck für beide Varianten per System.out. ausgeben und vergleichen

Hab den RegEx nur überflogen, aber da steckt sicherlich noch Potential drin. z.B. statt
Code:
{1,}
kann man auch einfach
Code:
+
schreiben, die Gruppen schein mir auch überflüssig.

String bietet im übrigen selbst eine Methode replaceAll(...)

Die Sache ist die. ich lese alle Ausdrücke aus einer XML Datei aus und speichere sie in den Arrays. Die Ausdrücke sind vielleicht nicht optimal aber sie funktionieren definitiv. Getestet mit System.out.print und regex online tools usw.

der Code beispielsweise funktioniert wuderbar:
Java:
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathExpressionException;
import org.xml.sax.SAXException;

public class MatcherClass
{
	public static void main(String args[]) throws XPathExpressionException,
			ParserConfigurationException, SAXException, IOException
	{
//		String[] regexes = new XMLwork().xmlRenameOld();
		 String[] regexes = {
		 "(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,}\\d{1,})--(\\d{1,})-(\\d{1,})_(\\w{1,})(.\\w{1,})",
		 "(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,})-(\\d{1,})-(\\w{1,}\\s\\w{1,}\\s\\w{1,})--(\\d{1,})_(\\w{1,})(.\\w{1,})"
		 };
		String[] replacement = new XMLwork().xmlRenameNew();
		// String[] replacement = {
		// "$1+$5+20$2+$4+$10$11", "$1+$5+20$2+$8+$9$10" };
		String candidateString = "BLA-120829-Seite-1-BLABLA-1-Seite1--001-001_farbe.tif";

//		 System.out.println(regexes[0]);
		Pattern p = Pattern.compile(regexes[0]);
		Matcher matcher = p.matcher(candidateString);
		String tmp = matcher.replaceAll(replacement[0]);
		System.out.println(candidateString + "\n" + "replace: " + tmp);

	}
}

und da habe ich nur das array regexes selber geschrieben in die klasse und nicht aus der xml gelesen. Das Array String[] replacement lese ich aber aus der XML aus. Das ist doch komisch oder?
 
H

hüteüberhüte

Gast
"BLA-120829-Seite-1-BLABLA-1-Seite1--001-001_farbe.tif"

Regex:

"BLA\\-120829\\-Seite\\-1\\-BLABLA\\-1\\-Seite1\\-\\-001\\-001_farbe\\.tif"

bzw.

"\\w+\\-\\d+\\-Seite\\-\\d+\\-\\w+\\-\\d+\\-[\\w\\d]+\\-\\-\\d+\\-.+"

bzw.

"(\\w+)\\-(\\d+)\\-Seite\\-(\\d+)\\-(\\w+)\\-(\\d+)\\-([\\w\\d]+)\\-\\-(\\d+)\\-(.+)"

matcht bei mir:

Java:
        Matcher m = Pattern
                .compile("(\\w+)\\-(\\d+)\\-Seite\\-(\\d+)\\-(\\w+)\\-(\\d+)\\-([\\w\\d]+)\\-\\-(\\d+)\\-(.+)")
                .matcher("BLA-120829-Seite-1-BLABLA-1-Seite1--001-001_farbe.tif");
        m.find();
        for (int i = 0; i <= m.groupCount(); i++) {
            System.out.println(m.group(i));
        }

Code:
BLA-120829-Seite-1-BLABLA-1-Seite1--001-001_farbe.tif
BLA
120829
1
BLABLA
1
Seite1
001
001_farbe.tif

Vielleicht hilft das ja

[EDIT]([\\w\\d]+)\\-

könnte man auch ersetzen in

([^-]+)\\-

. Würde mir auch beide reguläre Ausdrücke einmal mit sout ausgeben lassen und vergleichen! Diese sollten identisch sein[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern Java Basics - Anfänger-Themen 2
O reguläre Ausdrücke bei java.util.regex.Pattern Java Basics - Anfänger-Themen 4
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
R RegEx funktioniert nicht Java Basics - Anfänger-Themen 14
W RegEx Java Basics - Anfänger-Themen 4
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
A Zusammengesetzte Nomen/Straßennamen mit Regex-Ausdrücken trennen Java Basics - Anfänger-Themen 8
Fodoboo131 RegEx- Umwandlung von String in ausführbares Objekt/ Befehl Java Basics - Anfänger-Themen 9
H Java Regex Aufzählung kontrollieren Java Basics - Anfänger-Themen 3
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
K Wie verneine ich einen Regex? Java Basics - Anfänger-Themen 2
L Hilfe bei RegEx Java Basics - Anfänger-Themen 4
Dimax RegEx Java Basics - Anfänger-Themen 10
P Einfacher regulärer Ausdruck (RegEx) für E-Mail-Adressen Java Basics - Anfänger-Themen 2
O Regex bei ReplaceAll ersetzt Wort und Sonderzeichen nicht. Java Basics - Anfänger-Themen 9
O Text mit Regex trennen und wieder zusammenbauen Java Basics - Anfänger-Themen 5
L Regex issue Java Basics - Anfänger-Themen 4
B Regex Kombination benötigt Java Basics - Anfänger-Themen 5
strohkolben Regex Java Basics - Anfänger-Themen 3
OnDemand Regex oder Split? Java Basics - Anfänger-Themen 5
I String.split regex Frage Java Basics - Anfänger-Themen 2
C RegEx Problem Java Basics - Anfänger-Themen 4
Dimax RegEx funktionieren nicht Java Basics - Anfänger-Themen 7
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
K substitute mit regex Java Basics - Anfänger-Themen 10
G RegEx Java Basics - Anfänger-Themen 11
M Regex Erstellung Problem Java Basics - Anfänger-Themen 2
M Regex Probleme (mal wieder) Java Basics - Anfänger-Themen 3
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
G Regex Java Basics - Anfänger-Themen 4
M Regex-Ausdruck: Alle Zeichen bis auf ein bestimmtes erlauben (p{L}) Java Basics - Anfänger-Themen 5
M Regex anpassen Java Basics - Anfänger-Themen 19
C Regex-Problem Java Basics - Anfänger-Themen 4
M Regex für bestimmte Wörter bzw. bestimmte Zeichen erstellen Java Basics - Anfänger-Themen 5
C Positive und negative Zahlen mit Regex extrahieren Java Basics - Anfänger-Themen 8
F RegEx für Email Java Basics - Anfänger-Themen 2
F RegEx "+" nur als Zeichen, nicht als Operator oder Sonstiges Java Basics - Anfänger-Themen 2
FelixN RegEx aus einem String als String-Array zurückgeben Java Basics - Anfänger-Themen 8
FelixN RegEx Erläuterung "ˆ[ˆa-zA-Z]+$" Java Basics - Anfänger-Themen 6
F Regex Hilfe Java Basics - Anfänger-Themen 3
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
C Regex Java Basics - Anfänger-Themen 2
C Probleme bei Regex Java Basics - Anfänger-Themen 9
B Regex ignorieren von Groß - Kleinschreibung Java Basics - Anfänger-Themen 1
F Regex für Inlineformatierungen Java Basics - Anfänger-Themen 12
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
O Regex Java Basics - Anfänger-Themen 2
F Switch Case Problem mit Regex lösen? Java Basics - Anfänger-Themen 6
H regex-Problem Java Basics - Anfänger-Themen 2
F Ist das ein korrekter Regex-Ausdruck? Java Basics - Anfänger-Themen 12
M Zahlenbereich mit RegEx Java Basics - Anfänger-Themen 3
B Hilfe bei Regex - Erstellung Java Basics - Anfänger-Themen 5
D regex Aufbau Frage Java Basics - Anfänger-Themen 4
W RegEx Matcher + Pattern und Emails Java Basics - Anfänger-Themen 8
R Rechenzeichen als regex Java Basics - Anfänger-Themen 10
S Ich verstehe die RegEx Tabelle von Javadoc nicht so ganz Java Basics - Anfänger-Themen 3
C Erste Schritte Regex - Datei einlesen und splitten Java Basics - Anfänger-Themen 4
F RegEx Problem Java Basics - Anfänger-Themen 8
F Regex Hilfe Java Basics - Anfänger-Themen 14
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
U RegEx alle Kommas bei den Zahlen in Punkt umwandeln Java Basics - Anfänger-Themen 3
K RegEx - Multiple Line Java Basics - Anfänger-Themen 3
S Regex Pattern Java Basics - Anfänger-Themen 3
K Regex: illegal character range Java Basics - Anfänger-Themen 4
F RegEX Hilfe Java Basics - Anfänger-Themen 8
U Regex für kommaseparierte Zahlen Java Basics - Anfänger-Themen 1
K Operatoren Regex für 10er Zahlen Java Basics - Anfänger-Themen 8
V Java Regex richtig parsen Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
N mein RegEx Java Basics - Anfänger-Themen 2
C Lösung für RegEx in Java gesucht Java Basics - Anfänger-Themen 2
M Regex/matcher Java Basics - Anfänger-Themen 2
T Methoden String.matches() - Regex Java Basics - Anfänger-Themen 2
truesoul Regex für www Java Basics - Anfänger-Themen 0
N Methoden Straßennamen und Hausnummer - RegEx Java Basics - Anfänger-Themen 19
W Erste Schritte Regex negieren Java Basics - Anfänger-Themen 3
W String match mit Wildcard ODER Regex Java Basics - Anfänger-Themen 1
E useDelimiter-Anwednung / Regex Java Basics - Anfänger-Themen 2
C java regex Java Basics - Anfänger-Themen 2
C Regex zum matchen ausserhalb von Tags Java Basics - Anfänger-Themen 3
O Regex zwischenspeichern Java Basics - Anfänger-Themen 6
O Regex Java Basics - Anfänger-Themen 5
R Einfacher Regex Java Basics - Anfänger-Themen 3
V RegEx Java Basics - Anfänger-Themen 15
HoloYoitsu Datentypen replaceAll() mit regex? Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
G verwendung von regex Java Basics - Anfänger-Themen 3
X Regex splitten Java Basics - Anfänger-Themen 5
T Regex Problem Java Basics - Anfänger-Themen 4
B String nach regex überprüfen Java Basics - Anfänger-Themen 6
N Regex Java Basics - Anfänger-Themen 4
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
J Regex mit Return Java Basics - Anfänger-Themen 3
I Rechenoperatoren mit Regex splitten Java Basics - Anfänger-Themen 12
F Methoden replaceAll (regex) HTML Java Basics - Anfänger-Themen 3
H Problem mit Regex in Verbindung mit BufferedReader Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben