mikrocontroller.net

Forum: PC-Programmierung Regulärer Ausdruck: alles außer


Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wie muss ein regulärer Ausdruck aussehen, der "alles außer 'test'" 
auswählt?

Ich dachte an sowas: [^test], aber der will es nicht tun?

MfG
Mr.Green

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ich dachte an sowas: [^test], aber der will es nicht tun?

Das wäre genau ein Buchstabe, der alles außer t, e und s sein darf.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[^test] matcht exakt einen Buchstaben, der nicht t und nicht e und nicht 
s ist. Das ist nicht das was du moechtest.

"alles ausser 'test'" ist allerdings nicht eindeutig genug, wuerde ich 
sagen.
Wenn du so einen Eingabe-String hast:
"abctestdef"
auf was soll der regulaere Ausdruck dann passen?

1. Auf "abc"?
2. Auf "abctes"?
3. Auf "def"?
4. Auf "estdef"?
5. Auf gar nichts, weil in dem String "test" vorkommt?



Ein match "abc" "def" ist nicht erreichbar mit regulaeren Ausdruecken, 
da das kein zusammenhaengender Substring von "abctestdef" ist.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[^test] matcht genau ein Zeichen und zwar eines, das kein t, e oder s 
ist.

So wie die Frage jetzt formuliert ist kann man fast keine sinnvolle 
Antwort geben.

Die Problematik bei text vorm test und text danach liegt darin, dass 
man mit einem Regex-Ausdruck nicht text vorm  und text danach 
auswählen kann. Man kann mehrere Regex_Ausdrücke auswählen und dann 
kombinieren.

Ausdruck 1: "text vorm "
Ausdruck 2: "test"
Ausdruck 3: " und text danach"

In dem Fall würde man mit runden Klammern gruppieren und die so 
erzeugten Rückwärtsreferenzen neu arrangieren. Hier also \1 und \3 
behalten und \2 wegwerfen.

http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

EDIT: Chris war schneller ;-)

Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mich interessiert der Text drumherum gar nicht.

Der Java RegExp-Parser (->Matcher) prüft einfach, ob der übergebene 
String auf den Ausdruck passt.

Und ich will ihn dazu bringen, TRUE zu sagen, wenn ein String den Text 
"test" nicht enthält :)

Ich hoffe, das ist klarer geworden, was ich vorhab.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so. Prüfe einfach, ob der Text "test" enthält und negiere das 
Ergebnis.

Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Workaround bringt mir nichts, ich brauch den regulären Ausdruck :(

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist kein Workaround.

Du sagst dich interessiert der String an sich nicht, nur ob der String 
"test" darin enthalten ist. Wenn er NICHT drin ist, willst du TRUE 
haben.

Also fragst du den String ab, ob der String test enthalten ist (liefert 
TRUE oder FALSE) und bildest die logische Negation (macht aus dem FALSE 
das gewünschte TRUE).

Du kannst dir auch von hinten durchs Knie ins Auge schiessen. Mir wird 
das zu blöd und ich klinke mich jetzt hier aus.

Autor: Chris R. (mrgreen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:

> Du kannst dir auch von hinten durchs Knie ins Auge schiessen. Mir wird
> das zu blöd und ich klinke mich jetzt hier aus.

Ich weiß nicht, was daran zu blöd ist. Aber du scheinst es ja beurteilen 
zu können -.-

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Blöd? Du weisst nicht was daran blöd ist?

Blöd ist, Aufwand in etwas reinzustecken, bei dem nicht erklärt wurde, 
warum soviel Aufwand erforderlich ist und das angesichts der Tatsache, 
dass eine sehr einfache Lösung vorgeschlagen wurde, die jedoch 
kommentarlos abgelehnt wurde (EDIT: als Workaround disqualifiziert 
wurde).

Blöd genug?

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte schoen:

^([^t]*(t([^e]|e([^s]|s[^t]))|.{0,3}$)?)*$

Das Muster zum Erstellen dieses Ausdrucks ist nicht schwierig zu 
erkennen.

Allerdings wuerde ich eher diesen Ausdruck als "workaround" bezeichnen 
als das einfache Negieren einer Suche nach "test".

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huhu,

ich habe hier ein Mailscript, in welchem ich im Adminbereich reguläre 
Ausdrücke für Mails eingeben kann, die er löschen soll.

Ich lasse zum Beispiel Mails löschen, die ***SPAM*** im Betreff haben. 
Das funktioniert so:
/^\*\*\*SPAM\*\*\*/

Nun möchte ich alle Mails löschen, die RE: als Betreff haben.
Mails mit RE: Hallo im Betreff sollten aber dennoch ankommen. Wie kann 
ich mit einem regulären Ausdruck genau nur nach diesem RE: suchen ohne 
Beachtung von z.B. RE: Hallo?

Vielen Dank.
Liebe Grüße Danny

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.