regular expressions problem

Post Reply
Message
Author
slack
Posts: 6
Joined: 25. Aug 2006 16:42

regular expressions problem

#1 Post by slack »

hallo,

folgendes problem:

habe mehrere pakages:
x11-devel-i486-6.9.0
x11-i486-6.9.0
bzip2-i386-1.2

nun moechte ich aus dem oberen beispiel nur:
x11-deve-i486l haben, aus dem naechsten nur x11-i486 und aus dem letzten bzip2-i386...
hatte es hiermit versucht: .*(!?-\d+)
leider klappt das nicht, kann mir da jemand weiterhelfen?
es gibt nichts was ich mehr hasse als regexp :(

gruß,
slack

Marco Gerber

#2 Post by Marco Gerber »

Guten Tag

Mit regulaeren Ausruecken kannst du da auch nichts machen, weil regulaere Ausdruecke als endliche Automaten nicht in der Lage sind zu zaehlen.

Was du brauchst ist eine Substitution.

Beispiel fuer die bash:

Code: Select all

$ var="x11-devel-i486-6.9.0"
$ echo ${var%-*}
hth

Marco

slack
Posts: 6
Joined: 25. Aug 2006 16:42

hmm...

#3 Post by slack »

es geht mir ja nicht ums zaehlen... ich brauche einen ausdruck der genau das macht:

jedes zeichen solange kein -(zahl...) kommt markieren

ja ich koennte es zur not auch mit dem echo... machen, indem ich in popen ne pipe zum lesen aufmach und das in der sh ausfuehr, ist aber nicht gerade toll :/

slack
Posts: 6
Joined: 25. Aug 2006 16:42

#4 Post by slack »

aja, das ganze soll in c realisiert werden... mit pcre ;)

gruß

Marco Gerber

#5 Post by Marco Gerber »

hello again

Ein endlicher Automat, und damit ein regulaerer Ausdruck loest das sogenannte Wortproblem. Er entscheidet, ob ein Wort zu der Sprache, welche durch den Regulaeren Ausdruck definiert ist, gehoert oder nicht.

Regulaeren Ausdruecken fehlt ein Stack mit dem sie zaehlen koennten (zur Loesung dieses Problems kann man sogenannte Kellerautomaten beiziehen)

Du musst also die Idee, dein gesamtes Problem mittels eines regulaeren Ausdruckes loesen zu wollen verwerfen.

Was du jedoch tun kannst, ist folgendes:
Du grenzt deinen String ein, partitionierst ihn also auf die Anzahl zu untersuchender Zeichen (das sind in deinem Fall genau 2) und fuehrst dann auf diesem Teilstring einen regex durch und wertest dann das Ergebnis aus.
Dieser kann recht einfach aussehen (nicht implementierungsspezifisch !):

Code: Select all

-[0-9]


Ich hoffe du verstehst wo das Problem tatsaechlich liegt.

hth

Marco

slack
Posts: 6
Joined: 25. Aug 2006 16:42

#6 Post by slack »

ehrlich gesagt versteh ich das nicht...
hatte immer dieses "kodos" - und damit hab ich immer "gearbeitet".
es ist nur ein string (hab ne funktion die immer wieder aufgerufen wird), also versteh ich auch nich ganz wie du das mit dem zaehlen meinst...
werd mir das ganze morgen nochmal in ruhe angucken

thx fuer die hilfe

gruß

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#7 Post by Janka »

Wenn ich dich richtig verstanden habe, willst du alles nach dem letzten "-" abschneiden. Dieses Problem kann man nur mit "non-greedy"-Quantifiers lösen. Das wäre z.B. mit AREs "(.*)-.*?"

Ein Beispiel mit Tcl:

Code: Select all

$ tclsh
% regsub {(.*)-.*?} x11-devel-i486-6.9.0 {\1}
x11-devel-i486
% regsub {(.*)-.*?} x11-i486-6.9.0 {\1}
x11-i486
% regsub {(.*)-.*?} bzip2-i386-1.2 {\1}
bzip2-i386
Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

slack
Posts: 6
Joined: 25. Aug 2006 16:42

#8 Post by slack »

DANKE
*umwucht* :)))))
das war es wo ich gesucht habe :wink:

Marco Gerber

#9 Post by Marco Gerber »

Also irgendwie versteh ich das jetzt nicht. Du wolltest doch eine Loesung in C ?

Immer oefter habe ich das Gefuehl, dass die Leute selbst gar nicht wissen was sie eigentlich wollen....
Und das bezieht sich jetzt nicht nur auf diesen Thread hier.

Marco

texture

#10 Post by texture »

Immer oefter habe ich das Gefuehl, dass die Leute selbst gar nicht wissen was sie eigentlich wollen....
Und das bezieht sich jetzt nicht nur auf diesen Thread hier.
Die Fragestellungen sind deshalb auch ungenau. Die Antworten werden nicht richtig gelesen und deshalb fragt man einfach noch einmal. Da bemerkt man auch die geringe Eigeninitiative.
Einmal antworten und wenn man merkt das nichts dabei rauskommt, Finger davon.

Google spuckt das übrigens in <1 sec. raus

User avatar
Janka
Posts: 3585
Joined: 11. Feb 2006 19:10

#11 Post by Janka »

Die korrekte Formulierung eines Problems ist aber schon Teil der Lösung. Wenn man erst einmal weiß, wonach man sucht, ist der Rest vielfach Fleißarbeit.

Mich nerven viel mehr Fragesteller, die eine beschriebene funktionierende Lösung nicht ausprobieren können, weil dies irgendwelche Randprobleme erzeugt, von denen sie im Ursprungsposting aber nichts erwähnt haben. Oder die Randprobleme sind eingebildeter Natur, das ist dann noch schlimmer.

Janka
Ich vertonne Spam immer in /dev/dsp statt /dev/null.
Ich mag die Schreie.

slack
Posts: 6
Joined: 25. Aug 2006 16:42

#12 Post by slack »

@marco und texture
kein plan was fuer probleme ihr habt, mir auch egal, ich habe nach einer stinknormalen regex gefragt - habe btw. lange gegoogled und rumprobiert, also spart euch bitte so "vermutungen" wie geringe eigeninitiative - sowas finde ich beleidigend.

"Einmal antworten und wenn man merkt das nichts dabei rauskommt, Finger davon."
sehe hier keine antwort von dir, also am besten gleich finger von lassen,

mag sicher sein das die fragestellung etwas ungenau war, finde aber mit den antworten von mir durchaus verstaendlich. immerhin wusste janka was ich mein.
werd da auch nix mehr zu schreiben, keine lust auf ne diskussion

Post Reply