RegEx funktioniert nicht

RegExs

Mitglied
Huhu. Weshalb funktioniert der folgende kaskadierte RegEx nicht?

Java:
import com.codename1.util.StringUtil;

String r = StringUtil.replaceAll(f, "[^-a-zA-Z0-9()_]", "_");
r = StringUtil.replaceAll(r, "_{2,}", "_");
r = StringUtil.replaceAll(r, "&", "n");

Es sollen alle Sonderzeichen aus dem Dateinamen f entfernt werden.

Zeile 5 funktioniert, Zeile 3 jedoch nicht. Bin überfragt, denn nach regex101 sollte dieser funktioniert.
 

RegExs

Mitglied
Geht leider auch nicht 😭

Java:
        try {
            RE re1 = new RE("&");
            RE re2 = new RE("[^-a-zA-Z0-9()_]");
            RE re3 = new RE("_{2,}");
            FileSystemStorage fss = FileSystemStorage.getInstance();
            String[] files = fss.listFiles(homePath);
            ArrayList<String[]> map = new ArrayList<>();
            for (String f : files) {
                if (!fss.isDirectory(f)) {
                    String subst = re1.subst(f, "n");
                    subst = re2.subst(subst, "_");
                    subst = re3.subst(subst, "_");
                    if (!f.equals(subst)) {
                        map.add(new String[]{f, subst});
                    }
                }
            }
            for (String[] sa : map) {
                lm.addItem(Arrays.toString(sa));
            }
            if (force) {

                Dialog.show("Force", "Force clicked.", "OK", null);

            }
        } catch (Exception exc) {
            Dialog.show("IOException", "IOException ioe occurred.", "OK", null);
        }

re1 und re3 werden angewandt, aber re2 ist irgendwie falsch... Liegt das wohl am Perl-Dialekt?
 

KonradN

Super-Moderator
Mitarbeiter
Das interessiert mich jetzt aber doch noch etwas. Beim Vorschlag, String.replaceAll zu nutzen gab es den Hinweis:
aber ich nutze https://www.codenameone.com/ , um Anwendung für Desktop, Android und Web zu erstellen

Wo ist dabei das Problem beim nutzen der Java Framework Klassen? String ist eine Basis Klasse und da würde ich eine relativ vollständige Unterstützung erwarten.
Desktop und Android ist kein Problem -> Java SE wird auf dem Desktop genutzt. Android hat da dann Retrolambda um eben Java 8 Lambdas zu bekommen. (String Klasse bietet das aber schon ewig und auch zu Java 7 Zeiten)

Desktop and Android​

The other ports of Codename One use the VM’s available on the host machines/environments to execute the runtime. Retrolambda is used to provide Java 8 language features in a portable way.
The Android port uses the native Android tools including the gradle build environment in the latest versions.
The desktop port creates a standard JavaSE application which is packaged with the JRE and an installer.
Bei Web kommt TeaVM zum Einsatz:

JavaScript Port​

The JavaScript port of Codename One is based on the amazing work of the TeaVM project. The team behind TeaVM effectively built a JVM that translates Java bytecode into JavaScript source code while maintaining threading semantics using a very imaginative approach.
(Beide Zitate von: https://www.codenameone.com/developer-guide.html)

Da ist es dann tatsächlich so, dass hier die größten Probleme zu erwarten sind, weil TeaVM eben nicht auf das Java Framework in irgend einer Version setzt sondern da etwas eigenes macht.
Due to number of reasons TeaVM does not rely on Java class library of host JVM. Instead, TeaVM comes with its own implementation of subset of Java class library.

Aber was ich so gesehen habe, dürfte es da bei String.replaceAll eigentlich keine Probleme geben. Aber da diese Web Komponente nur Enterprise Kunden vorbehalten ist, konnte ich da nichts ausprobieren.

Wäre super, wenn Du da die Probleme, die Du bekommen hast, etwas erläutern könntest. Denn das wäre ja doch relativ wichtig bei so einem Produkt.
 

KonradN

Super-Moderator
Mitarbeiter
Wirklich interessant - in der javadoc listet Codename one auch im Package java.lang die Klasse String und diese ohne replaceAll:

Also scheint das zumindest auf den ersten Blick tatsächlich entsprechend eingeschränkt zu sein - auch wenn ich da so auf Anhieb keine zwingende Notwendigkeit für sehe.
 

httpdigest

Top Contributor
Ja, und stattdessen bauen die sich eine eigene Klasse https://www.codenameone.com/javadoc/com/codename1/util/regex/RE.html .
Das kann ich mir eigentlich nur dadurch erklären, dass es evtl. entweder:
  • semantische Unterschiede zwischen den Patterns bzw. der Implementierung von Java SE gibt, so dass deren Implementierung nicht kompatibel zu der von java.lang.String ist (für jede Plattform)
  • eine Implementierung in java.lang.String nicht überall performant wäre, weil ja ein Pattern "on-demand" und temporär compiliert bzw. interpretiert werden müsste (zwar cachebar, aber wer weiß). Bei deren RE Klasse hätte man immerhin noch eigene Instanz einer Kompilierung (wie bei Java SE's regex Pattern Klasse). --> was einen zur nächsten Frage führen könnte? Haben sie java.util.regex.Pattern?
 

KonradN

Super-Moderator
Mitarbeiter

Da sehe ich kein Java.util.regex so ich es jetzt auf dem Smartphone nicht übersehen habe.

Das ist da so extrem ausgedünnt und das reduziert doch die Nützlichkeit enorm. Wenn man schaut, wie andere da vorgehen - da wird dann das ganze .Net auf die WebAssembly gebracht.

Das sah auf den ersten Blick sehr interessant aus, aber die Limitierungen sind doch enorm - da sind dann 499€/Monat auch kaum zu rechtfertigen (den JavaScript Part bekommt man nicht drunter) …

Da sind dann andere Ansätze deutlich besser und i.d.R. günstiger … wenn es das gewohnte Framework nicht gibt: dann wäre auch gleich flutter denkbar (keine Kosten, alle Plattformen) oder man greift auf .Net MAUI / Blazor zurück (aber das ist nicht so einheitlich. Da wird die Blazor Webapp in der Mobilen App sozusagen verpackt) …. Oder natürlich ganz klassisch html/css mit JS oder TS und dann Apache Cordova ….

Ich hatte mir da auf den ersten Blick mehr versprochen von …. Aber evtl. ist mein Eindruck ja falsch und wir bekommen da vom @RegExs eine andere Sicht.
 

RegExs

Mitglied
ALso ich bin sehr zufrieden damit, aber nutze auch nicht die Basic oder Pro Version.

Man kann die Anwendung entweder direkt lokal oder remote bauen lassen, wie man möchte.

Das heruntergeladene Projekt vom Codename One initializr lässt sich sofort in IntelliJ öffnen (es gibt auch ein IJ Plugin...)

Falls euch der Einstieg interessiert, hier wäre eine gute Anlaufstelle: https://www.codenameone.com/developer-guide.html

Ja, es gibt bei bestimmten Sachen Einschränkungen, wie eben bei den regulären Ausdrücken... Codename One verwendet hier eigene Klassen und die Perl-Syntax, was ich erst nicht wusste. Aber wenn man Methoden nutzen möchte, die es "nicht gibt", bekommt man schnell eine Fehlermeldung, wenn man das Projekt lokal baut.

Hoffe, das schreckt einige jetzt nicht zu sehr ab...
 

KonradN

Super-Moderator
Mitarbeiter
Danke erst einmal für Deine Rückmeldung. Das war bei mir auch ein kleines bischen Enttäuschung. Das Projekt hatte ich noch gar nicht auf dem Schirm und wenn man sowas sieht, dann versucht man das natürlich direkt einzuordnen. Und das ist dann extrem subjektiv.

Und was man ja auch noch sehen muss: Das waren ja nicht alle Systeme, die unterstützt werden. Es gibt auch noch Übersetzungen hin zu iOS und UVP. Und dann hat man sehr viel und bei regulären Ausdrücken wird vermutlich @httpdigest auch Recht haben mit den Abweichungen bei dem Verhalten der regulären Ausdrücke auf den unterschiedlichen Systemen.

Es war auf jeden Fall interessant, da mal einen Blick drauf zu werfen. Ich wünsche Dir da auf jeden Fall viel Erfolg und Spaß bei.
 

RegExs

Mitglied
Mit ein Grund war auch, dass ich mich etwas vor dem Umfang und Komplexität des Android Studios scheue. Aber das ist nur eine persönliche Sicht/Erfahrung.
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. eine kleiner Hinweis - nicht dass ich da falsch verstanden wurde:

Mit ein Grund war auch, dass ich mich etwas vor dem Umfang und Komplexität des Android Studios scheue. Aber das ist nur eine persönliche Sicht/Erfahrung.
Meine Ablehnung war auch mehr in der Richtung, dass ich andere Multi Plattform Lösungen bevorzuge. Deine Wahl ist auf jeden Fall legitim und die wollte ich nicht anzweifeln oder gar in Frage stellen. Das war also kein "Überlege Dir das noch einmal!" oder so. Daher mich in dem Punkt bitte nicht missverstehen!

Der Wunsch mit dem viel Spaß und Erfolg war also auch ernst gemeint und kein abfälliger Kommentar. Und prinzipiell sieht es sogar so interessant aus, dass ich das sogar noch vertiefen würde, wenn es meine Zeit zulassen würde. aber ich habe zum einen diese Idee vom JAdventure, die ich umsetzen will und zum anderen darf ich mich gerade mit .Net Blazor / .Net MAUI beschäftigen.

Daher auch ganz wichtig: Egal was du wählst: Es wird immer jemand kommen und sagen: Das ist Sch..... nimm lieber was anderes. (Und wenn Du da keinen findest: Komm zu mir. Ich kann das immer sagen :) )
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
F OOP Warum funktioniert dieser Regex? Java Basics - Anfänger-Themen 15
B Regex Order unwichtig bei Lookaheads? Java Basics - Anfänger-Themen 7
F RegEx Hilfe Java Basics - Anfänger-Themen 5
B Regex Ausdrücke für Monate Java Basics - Anfänger-Themen 7
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
B Java - Reguläre Ausdrücke - RegEx oder Regular Expressions - Eckige Klammern 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
J Regex Ausdrücke im Array - Wieso werden sie nicht erkannt? Java Basics - Anfänger-Themen 4
N Regex Java Basics - Anfänger-Themen 4
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