Reguläre Ausdrücke bearbeiten/ändern

jstei001

Aktives Mitglied
Hi,

ich hab mal wieder so ein extra spezial Problem, und zwar habe ich reguläre Ausdrücke, die aus einer XSD Datei kommen.

Ich muss jetzt Strings erzeugen die zu diesen regulären Ausdrücken passen, das löse ich mit Xeger.

Aber...... Das Problem ist, dass die regulären Ausdrücke manchmal nicht die einzige Beschränkung sind z.B. habe ich ein XML Element mit einem pattern von : [0-9]*, jetzt ist aber explizit noch festgelegt das es eine feste Länge von z.B. 30 haben muss.

Xeger erzeugt nun alles von []...[645]...[68441564] die Länge spielt ja für die Regex keine Rolle, meine erste Idee war die Regex zu manipulieren so das sie so Aussieht [0-9]30 z.B.

Aber ich habe auch kompliziertere Ausrücke wie: ([%&/(=*!)/§] | [......] | [......])*

Bei manchen Ausdrücken parse ich mir einen ab, bis ich die als Strings komplett zerlegt habe und wieder zusammengestückelt habe.

Gibt es zu dieser Metzgermethode eine schönere Lösung?? Am schönsten wäre natürlich so eine Klasse die Regex manipulieren kann z.b. die Gesamtlänge abändern etc.

Weiß da jemand was?

Vielen Dank schonmal
 

Attila

Bekanntes Mitglied
Java:
String regex = "(?<=\\[)(\\d+?)(?=\\])";  // ohne []
oder:
Java:
String regex = "\\[\\d+\\]"    // [ .... ]
 
Zuletzt bearbeitet:

jstei001

Aktives Mitglied
Danke,

jetzt muss ich aber doof fragen, was bedeutet das im Klartext? Wo trage ich da jetzt meine gewünschte Länge ein? Und was heißt ?, d steht wahrscheinlich für Digit.
 

jstei001

Aktives Mitglied
Das [0-9]* ist ein Beispiel, diese Fälle sind ja einfach aber ich habe auch solche:
([A-ZÄÖÜßÅÆÐÑØÞ0-9]|[ ]|[!#$%,/:;=_§^`]|[\(\)\*\+\?\.\-]|["&'<>])*

Im Prinzip brauch ich einen Regulären Ausruck der alle * die als Mengenangabe gemeint sind ersetzt und die * die als Zeichen gemeint sind ausen vor lässt.

Aber der müsste für Alle Regex funktionieren weil das ganze läuft dynamisch. Das heißt ich kenne die Regulären Ausdrücke erst zur Laufzeit.

Ich brauch also ein Regex das in einem String(Der auch ein Regex darstellt) alle "*" die nicht in [ ] sind ersetzt, damit ich die Länge des Generierten String bestimmen kann.
 
N

nillehammer

Gast
Ich würde das nicht über die Manipulation der Regex machen. Stelle Dir die Aufgabe, Test-Text zu erzeugen, als Prozess vor. Die Generierung mit Xeger ist der erste Schritt. Die Beachtung eines Längenconstraints der Zweite, alle Buchstaben zu lowercase der Dritte, Alle Tabs mit Leerzeichen ersetzen der Vierte usw. Umsetzen ließe sich das mit Chain-Of-Command. Damit bist Du sehr flexibel.
 

jstei001

Aktives Mitglied
Ich bin nicht daran gebunden mit Regex zu arbeiten aber wie soll ich dem Xeger beibringen das er einen Längen Constraint beachten soll?

Ich würde auch einen anderen Generator nehmen, meine Aufgabe ist nur ein Zufalls String zu erzeugen der einem Pattern passt aber in manchen Fällen obwohl im Pattern "*" als Länge angegeben ist eine feste Länge haben soll.

Klingt eigentlich einfach aber mir raucht der Kopf :)
 

Swoop

Gesperrter Benutzer
Ich würde das Pattern manipulieren.
Gehe einfach über jedes Zeichen des Strings drüber.
Kommt ein [ dann setze ein Flag auf true. Kommt wieder ein ] dann wird das Flag aus false gesetzt.
Prüfe dann jedes Zeichen welches nicht in eckigen Klammern ist, ob es ein * Zeichen ist. Ist es das, wird es ersetzt.
Natürlich musst dann noch beachten, ob das Zeichen noch maskiert ist!
Aber das sollte eigentlich gut klappen! Ist halt Fehleranfälliger aber ich denke performanter als die Variante von Nillehammer
 
N

nillehammer

Gast
jstei001 hat gesagt.:
Ich bin nicht daran gebunden mit Regex zu arbeiten aber wie soll ich dem Xeger beibringen das er einen Längen Constraint beachten soll?

Ich würde auch einen anderen Generator nehmen, meine Aufgabe ist nur ein Zufalls String zu erzeugen der einem Pattern passt aber in manchen Fällen obwohl im Pattern "*" als Länge angegeben ist eine feste Länge haben soll.
Xeger bringst Du das garnicht bei. Gehe entsprechend dem folgenden Pseudocode vor:
Code:
- Erster Schritt, Xeger erzeugt regexkonformen String
- Zweiter Schrit, prüfen ob zusätzlich Längenconstraint existiert
   - fallls ja, nimm Xeger-String und schneide die überlangen Zeichen weg
   - falls nein, fertig
Das kann man sicher direkt runterprogrammieren. Da ist die Anwendung eines Patterns wie Chain-of-Command vielleicht wirklich übertrieben.
 
Zuletzt bearbeitet von einem Moderator:

jstei001

Aktives Mitglied
Code:
- Erster Schritt, Xeger erzeugt regexkonformen String
- Zweiter Schrit, prüfen ob zusätzlich Längenconstraint existiert
   - fallls ja, nimm Xeger-String und schneide die überlangen Zeichen weg
   - falls nein, fertig

Die Idee hatte ich auch schon.

Problem

[0-9]* mit Länge 5.

Xeger Output: 1236589 ----> schnipp schnapp 12365----> geht

aber Xeger output "" oder "12" -----> :noe:

Es scheint anscheinend auch keine einfache Regex zu geben mit der man ein Zeichen innerhalb von Klammern selektieren kann. Ich dachte an Positive Look behind/ahead und meine idde war
Java:
String pattern = "([A-ZÄÖÜßÅÆÐÑØÞ0-9]|[ ]|[!#$%,/:;=_§^`]|[\(\)\*\+\?\.\-]|["&"'<>])*";

pattern = pattern.replace("(?<=\\[.*)\\*(?=.*\\])","markierung");

pattern = pattern.replaceAll("\\*","30");
pattern = pattern.replaceAll("markierung","\\*");

Aber geht auch nicht schon hier [c]pattern = pattern.replace("(?<=\\[.*)\\*(?=.*\\])","markierung");[/c] macht der nix, liegt aber wahrscheinlich an mein Regex.
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Die Idee hatte ich auch schon.

Problem

[0-9]* mit Länge 5.

Xeger Output: 1236589 ----> schnipp schnapp 12365----> geht

aber Xeger output "" oder "12" ----->
Ok, der Längenconstraint ist also offensichlich keine Maximallänge (hatte ich so verstanden), sondern eine exakte Länge. Keine Idee, was man da machen kann? Wie wärs mit ner Schleife, die zu kurze Strings einfach wegschmeißt und erst endet, wenn ein genügend Langer von Xeger kommt?
 
Zuletzt bearbeitet von einem Moderator:

Logaff

Bekanntes Mitglied
so wie ich das verstanden habe besteht das Problem doch nur noch daraus den String zu kürzen. Gibst da nich was aus der API: String.substring()....
 

Tobse

Top Contributor
Das Problem ist doch, dass der String druch substring vllt seine Gültgkeit auf den Regex verleirt....
Aber du hast ja die Regex und kannst über Pattern.compile() die ja auch verwenden.

Würde es klappen, dass du gruppen in der regex, die * mal vorkommen mit Pattern#match und dann mit Match#group rausschneidest und dann so weit verlängerst/verkürzt, wie dus brauchst?
 

Mujahiddin

Top Contributor
@ TO:
Code:
pattern = patter.replaceAll("(?<=\\[.*)\\*(?=.*\\]", "markierung");
muss es heißen.
Code:
replaceAll
macht's mit Regex,
Code:
replace
ohne.

edit:
feste Länge geht bei Regex mit
(expression){n}
Dann gibt's noch variable min/max:
(expression){min,max}
Nur min:
(ex){min,}
Nur max:
(ex){0,max}
 
Zuletzt bearbeitet:

jstei001

Aktives Mitglied
Ich habs jetzt gelöst, und zwar genau damit (expression){n}, ich parse das als String und schau nach allen "*" die auserhalb von ( ) stehen, damit funktionierts. Ich hatte halt gehofft es gibt eine Regex die mir alle * auserhalb von ( ) geben, dass wäre schöner gewesen. Trotzdem Danke an alle
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
E Reguläre Ausdrücke: String-Ersetzung Allgemeine Java-Themen 0
G Reguläre Ausdrücke Allgemeine Java-Themen 11
G Reguläre Ausdrücke Allgemeine Java-Themen 2
S Reguläre Ausdrücke: Polynomterme Allgemeine Java-Themen 14
C reguläre Ausdrücke finden nicht was sie finden sollen Allgemeine Java-Themen 8
F Reguläre Ausdrücke und BBCode Allgemeine Java-Themen 10
J String für reguläre Ausdrücke escapen Allgemeine Java-Themen 2
C Reguläre Ausdrücke - X{0}?.* Allgemeine Java-Themen 8
C Reguläre Ausdrücke, String rückwärts durchsuchen Allgemeine Java-Themen 6
I Reguläre Ausdrücke und das "~" Symbol Allgemeine Java-Themen 2
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
H Regex - Reguläre Ausdrücke Allgemeine Java-Themen 3
A Reguläre Ausdrücke vereinfachen Allgemeine Java-Themen 19
J Reguläre Ausdrücke Allgemeine Java-Themen 14
A Zufallswerte für reguläre Ausdrücke Allgemeine Java-Themen 15
G Reguläre Ausdrücke Allgemeine Java-Themen 8
R reguläre Ausdrücke Allgemeine Java-Themen 2
L Reguläre Ausdrücke und Fehlerbehandlung Allgemeine Java-Themen 10
RaoulDuke Reguläre Ausdrücke - Daten extrahieren Allgemeine Java-Themen 3
L reguläre Ausdrücke? Allgemeine Java-Themen 2
R Reguläre Ausdrücke (mehrzeilig) Allgemeine Java-Themen 2
C Reguläre Ausrücke Punkte im Satz richtig erkennen Allgemeine Java-Themen 6
E Reguläre Txt in Tree parsen Allgemeine Java-Themen 2
J Reguläre Ausrücke - Klammer nicht vorhanden Allgemeine Java-Themen 2
B kontextfreie grammatik / reguläre grammatik Allgemeine Java-Themen 2
P reguläre ausrücke und String.matches Allgemeine Java-Themen 4
S Reguläre Ausdruecke! Allgemeine Java-Themen 5
A Lambda-Ausdrücke Allgemeine Java-Themen 5
M Lambada Ausdrücke - wie funktionieren und benutzt man sie? Allgemeine Java-Themen 5
S Lambda Ausdrücke: @FunctionalInterface Instanzen auf null prüfen Allgemeine Java-Themen 9
Z Design um boolsche ausdrücke zu speichern & auszuwerten Allgemeine Java-Themen 3
R Logische Ausdrücke in Java Allgemeine Java-Themen 4
Loyd Noch ne Regex-Frage: Verschachtelte Ausdrücke Allgemeine Java-Themen 4
H Geklammerte Ausdrücke nach Divide&Conquer Allgemeine Java-Themen 2
B Parser für logische Ausdrücke Allgemeine Java-Themen 9
J Expression Language für mathematische Ausdrücke Allgemeine Java-Themen 8
B Regeuläre Ausdrücke Allgemeine Java-Themen 8
G arithmetische ausdrücke Allgemeine Java-Themen 5
M Regular Expression - verschiedene Ausdrücke testen (grep | ) Allgemeine Java-Themen 5
Trèfle Excel-Datei nicht speicherbar, da von Java zum Bearbeiten gesperrt. Allgemeine Java-Themen 3
I File ausführen und mein Programm bearbeiten lassen Allgemeine Java-Themen 11
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
Viktim Threads Liste In unterschiedlichen Threads bearbeiten Allgemeine Java-Themen 23
E Best Practice LaTeX aus Textdateien einlesen und bearbeiten Allgemeine Java-Themen 4
KaffeeFan Bilddatei einlesen und bearbeiten? Allgemeine Java-Themen 5
ms_cikar Java Excel bearbeiten spalten werden überschrieben. Allgemeine Java-Themen 4
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
P HTML Text bearbeiten Allgemeine Java-Themen 1
D Mausgesten in Java bearbeiten. Allgemeine Java-Themen 1
J 2 PDFs zusammenführen und bearbeiten Allgemeine Java-Themen 1
GUI-Programmer Mp3 Dateien bearbeiten und speichern Allgemeine Java-Themen 3
M Umbgebungsvariable mit Java bearbeiten Allgemeine Java-Themen 4
M Threads Excel files bearbeiten Allgemeine Java-Themen 4
H ResourceBundle während Laufzeit bearbeiten Allgemeine Java-Themen 3
C Mit Java PDF Dateien bearbeiten. Allgemeine Java-Themen 2
T Datei lesen, bearbeiten, speichern Allgemeine Java-Themen 14
K LibreOffice Tabelle Dateien im Format .ods bearbeiten Allgemeine Java-Themen 2
N POI Passwortgeschützte Excel-Datei bearbeiten Allgemeine Java-Themen 3
N xls erstellen / bearbeiten Allgemeine Java-Themen 8
B String bearbeiten Allgemeine Java-Themen 11
0 Datein aus laufender Jar lesen und bearbeiten Allgemeine Java-Themen 10
C Auslesen + Bearbeiten einer UTF8 Datei Allgemeine Java-Themen 5
J Input/Output Dateien bearbeiten - "Best Practice" Allgemeine Java-Themen 3
B AudioInputStream, bzw. Sound bearbeiten / splitten Allgemeine Java-Themen 2
D OpenOffice Calculator Dateien mit Java bearbeiten Allgemeine Java-Themen 3
J Document Bearbeiten. Allgemeine Java-Themen 3
J JFrame / PopUp-Menü bearbeiten Allgemeine Java-Themen 2
K Word Dokument bearbeiten Allgemeine Java-Themen 2
P Vectoren bearbeiten: ConcurrentModificationException Allgemeine Java-Themen 4
R String bearbeiten Allgemeine Java-Themen 2
O PDF-Dateien bearbeiten/durchsuchen Allgemeine Java-Themen 3
ARadauer Word Datein bearbeiten Allgemeine Java-Themen 3
Noar Datei einlesen, bearbeiten, ausgeben Allgemeine Java-Themen 5
M Übergebener String bearbeiten geht nicht. Allgemeine Java-Themen 4
C Bilder automatisch bearbeiten/manipulieren Allgemeine Java-Themen 2
G Bearbeiten von Files in einem Thread Allgemeine Java-Themen 4
G WAV-Samples bearbeiten oder: 2 Bytes -> short -> float Allgemeine Java-Themen 5
P Observer, nicht alle updates bearbeiten Allgemeine Java-Themen 2
C wav bearbeiten Allgemeine Java-Themen 5
S Problem beim Bearbeiten von Java-Dateien unter Linux Allgemeine Java-Themen 3
B Bestehendes Programm bearbeiten Allgemeine Java-Themen 5
T Bilder bearbeiten unglaublich langsam Allgemeine Java-Themen 9
P Mit Java ein Bild bearbeiten Allgemeine Java-Themen 3
D Mehrere Dateien einlesen & bearbeiten Allgemeine Java-Themen 2
P Excel-Datei mit Java bearbeiten Allgemeine Java-Themen 2
P String bearbeiten - mit regex? Allgemeine Java-Themen 2
M Zip - Dateien bearbeiten ..... Allgemeine Java-Themen 1
D Bilder einlesen, bearbeiten und wieder in Datei schreiben Allgemeine Java-Themen 3
M Strings binär bearbeiten Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben