regex alle Zeichen bis zu einem bestimmten

max40

Lt. Junior Grade
Registriert
Nov. 2010
Beiträge
256
Hallo,
ich habe das Problem das ich nach beliebigen Text suchen will, bis das erste '+' Zeichen gefunden wird.
Es wird mir aber der kompletter Text bis zum letzten '+' Zeichen zurückgegeben.
Wie muss ich mein Regex-Inhalt ändern?

Text:
Code:
xxxaaa123456789::9beliebige (Sonder-)Zeichen :?ßÜö%$§+Weiterer Text, der unwichtig ist!+und weiter gehts

Regex:
Code:
xxxaaa[0-9]{1,}::9(.{1,})\+

Ergebnis:
Code:
xxxaaa123456789::9beliebige (Sonder-)Zeichen :?ßÜö%$§+Weiterer Text, der unwichtig ist!+

Benötige aber:
Code:
xxxaaa123456789::9beliebige (Sonder-)Zeichen :?ßÜö%$§+

Was müsste ich anpassen?

Vielen Dank + Gruß
Max
 
Schau, dass du fuer das + ne Schranke definierst, also dass es genau 1 mal vorkommen soll.
 
Ergänzend:

Schau mal bei Regex101.com vorbei, da wird auch die jeweilige Abfrage immer erklärt und warum sie ausgibt, was aie ausgibt.
Deine Ausgabe hat zum Beispiel das erste + gar nicht abgefangen.
Screenshot_20210712_143909_com.android.chrome.jpg

Edit: Viel zu langsam 😂
 
Vielleicht auch regexr. Hat meiner Meinung nach eine tolle Grafische Darstellung vom Regex bezüglich Groups etc. Aber 101 ist auch super :-)
 
Hm? Wäre nicht sowas wie
Perl:
/[^\+]+\+/

ausreichend: Alle Zeichen außer "+" bis zum nächsten "+" ? 🤔
 
  • Gefällt mir
Reaktionen: 0x8100
@RalphS dein regex ist sogar der beste, da er am wenigsten rechenzeit benötigt. bei regulären ausdrücken kann sowas auch schnell nach hinten losgehen, wie z.b. cloudflare erfahren musste.
 
Mit Verlaub, wenn du nur das erste + Zeichen suchst, ist Regex vielleicht gar nicht nötig.
Wie wärs mit einem einfachen substring?:
Javascript:
let str = 'xxxaaa123456789::9beliebige (Sonder-)Zeichen :?ßÜö%$§+Weiterer Text, der unwichtig ist!+und weiter gehts';
let fromFirstPlusSign = str.substr(str.indexOf('+') + 1)
console.log(fromFirstPlusSign);

(du hattest die Sprache nicht dazu geschrieben, deswegen hab ich mal JavaScript benutzt)
 
Umsetzung ist in Java.
Nach was gesucht werden soll, wird von aussen gesteuert. Und bisher konnte da alles mit regex umgesetzt werden.

Vielen Dank an alle.

Gruß Max
 
Nur nachträglich: ich persönlich find's ... angenehmer... wenn man sich im Verlauf seiner Applikation an irgendeine Form von "Standard" hält, wenn es um Teilzeichenfolgen geht. Und da ist Regex einfach die flexibelste.

Ansonsten fängt man mit substring() an und merkt irgendwann, mist, hier reicht das nicht.
Dann fängt man mit substring_von_hinten() an.
Dann hast plötzlich einen echten Teilstring wo man den Anfang nicht kennt und das Ende auch nicht, also hat man drei Schritte, nämlich Anfang finden, Ende finden, Substring über beides.
Und mit ein bißchen Pech stellt man irgendwann fest, ich brauche Kontext weil ich ansonsten evtl das falsche finde und/oder ersetze.

Das kann man alles mit Regex abfressen. Einheitlicher Code => einheitliches Layout => einheitliches Verständnis. Und wenn der Regex so komplex wird, daß man durch simples Draufschauen nicht mehr versteht, was da passiert.... dann hat man a) meist viele viele Codezeilen gespart und kann diesen b) trotzdem noch kommentieren.

YMMV.
 
  • Gefällt mir
Reaktionen: floq0r
RalphS schrieb:
Dann hast plötzlich einen echten Teilstring wo man den Anfang nicht kennt und das Ende auch nicht, also hat man drei Schritte, nämlich Anfang finden, Ende finden, Substring über beides.
Und mit ein bißchen Pech stellt man irgendwann fest, ich brauche Kontext weil ich ansonsten evtl das falsche finde und/oder ersetze.
Ich will den Post nicht unnötig aufblähen, aber hier möchte ich zumindest noch eine andere Meinung posten :-) Früher hab ich auch alles mit Regex gemacht, mitlerweile bin ich aber der Ansicht, dass man sich mit Regex oft Bugs einfängt, weil man Edge-Cases nicht bedacht hat... Ich halte mich eher an KISS. Wenn man kein Regex braucht, macht mans lieber einfacher. Wenn man was komplexes braucht, kann man auch einen Parser schreiben. Für alles dazwischen ist Regex zwar OK, aber nur bedingt wartbar. Die Performance von Regex spielt tatsächlich nur selten eine Rolle, aber ist auch ein Argument :-)
 
  • Gefällt mir
Reaktionen: Quaussi und RalphS
Zurück
Oben