Hinweis: Das Forum wird geschlossen! Neue Registrierungen sind nicht mehr möglich!

 Zurück zu Pro-Linux   Foren-Übersicht   FAQ     Suchen    Mitgliederliste
Größeres Problem mit RegExpr. ... Jochen ? ;-)

 
Neuen Beitrag schreiben   Auf Beitrag antworten    Pro-Linux Foren-Übersicht -> Programmieren - Allgemein
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
regexp
Gast





BeitragVerfasst am: 11. Feb 2003 17:51   Titel: Größeres Problem mit RegExpr. ... Jochen ? ;-)

Folgende Vorgabe:

Ein string soll nach beinhaltetem „#col“ durchsucht und der darauf folgende string ausgegeben werden… wie folgt.

-Wenn nach #col ein Leerzeichen steht, dann prüfe die darauffolgenden 6 Zeichen, wenn kein Leerzeichen steht, dann prüfe die unmittelbar auf #col folgenden 6 zeichen.
#colFF00aa3245 dfjh == color = „FF00aa“
#col FF00aa3245 dfjh == color = „FF00aa“

-Wenn diese 6 Zeichen HEX sind ([a-fA-F0-9), dann gib sie aus, wenn nicht, dann gib Wort bis zum nächsten Leerzeichen aus
#colFF00aa3245 dfjh == color = „FF00aa“
#collightblue dada == color = “lightblue”
#colred dadada == color = „red“
#colaffe dadada == color = „affe“

- Wenn diese 6 Zeichen HEX sind ([a-fA-F0-9), dann gib sie aus, wenn nicht, dann gib Wort bis zum nächsten Leerzeichen aus

WICHTIG “#” ist nicht der Anfang des Eingabestrings, so sollte

dadada#colFF00aa3245 dfjh == color = „FF00aa“

auch funktionieren.


schonmal DANKE für jeden denkanstoß
 

Jochen
Gast





BeitragVerfasst am: 11. Feb 2003 20:08   Titel: Re: Größeres Problem mit RegExpr. ... Jochen ? ;-)

Also, ich fühl mich jetzt einfach mal angesprochen... (Hättest aber auch den alten Thread weiterführen können.)

Immer wenn es so komplex wird, wird man auf die Extended Regexps umsteigen müssen bzw. auf ein Tool, dass diese beherrscht. Mein Favorit ist da immer noch der awk.

code:

awk '
match ($0 , /#col([0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]| *[^ ]+( |$))/) {
color = substr ($0, RSTART+4, RLENGTH-4)
sub (/^ */, color)
print color
}'

Der RE benutzt mittels "|" zweimal Alternativen: Entweder Hex-Angabe oder Wort, und Wort gefolgt von Blank oder Zeilenende. Ansonsten wird der Treffer aus $0 herauskopiert (ohne "#col", eventuell führende Blanks gelöscht und das Endresultat ausgegeben. Tipp am Rande: Regexps sind nicht abtippfreundlich, also benutze besser Cut'n'Paste.

Habe ich damit das Problem erlegt, oder habe ich was falsch verstanden?

Jochen
 

regexp
Gast





BeitragVerfasst am: 11. Feb 2003 23:24   Titel: Re: Größeres Problem mit RegExpr. ... Jochen ? ;-)

hi Jochen .. erstmal DANKE für die Antwort.

irgendwie versuche ich das Problem im Moment mit php umzusetzen.
Hättest du evtl. eine Idee, wie dies in C(++) aussehen könnte ? :)

regexps habe ich bisher mit egrep gemacht.

nochmals DAAANKE
 

Jochen
Gast





BeitragVerfasst am: 12. Feb 2003 8:49   Titel: Re: Größeres Problem mit RegExpr. ... Jochen ? ;-)

Tjaaa... PHP ist mein Persönliches Hoffnungsloses Problem . Zu deutsch, ich kann es nicht, brauche es aber auch nicht und ist daher auf die gaaanz lange Bank geschoben. Aber wenn PHP in irgendeiner Library den Umgang mir Regexps mitbringt, wäre es nur eine Sache des Manual-Page-Durchforstens, welche Regexps von PHP unterstützt werden und welche Funktionen dazu existieren. Vielleicht kann Dir da ja jemand anders einen Tipp geben.

Betreffs C++ kann ich (auch) keine genaue Aussage treffen (vielleicht hat ja http://freshmeat.net was?). Aber für C gibt es in der glibc die Funktionen regcomp(), regexec(), regerror() und regfree(). Wie üblich hilft ein "man regcomp" weiter.

Und egrep bringt Dich hier auf die Dauer nicht weiter. Regexps sind nur Muster, die Zeichenketten bestimmter Art beschreiben. Wenn eine Zeichenkette auf einen Regexp passt, kommt es auf das Programm an, welches die Regexps anwendet, was dann passiert. Und egrep gibt bei Treffer halt immer die ganze Zeile aus und ist damit nicht das richtige Tool für Deine Anforderung.

Jochen
 

regexp
Gast





BeitragVerfasst am: 12. Feb 2003 9:03   Titel: Re: Größeres Problem mit RegExpr. ... Jochen ? ;-)

hi jochen,

wie bei dir php, so ist bei mir awk das Problem .
PHPliefert librarys, mit denen ich REs verwenden kann. Die Erstellung und das TEsten habe ich mit eifnachen REs immer mit egrep gemacht. Nur komme ich in diesem Falle damit nicht weiter (hätte ja auch ein syntax-problem sein können)

Zu meinem Problem:

danke für den Code noch einmal,
aber wenn ich "#col ffaabbccdd" eingebe so erscheint dann als Ausgabe: " ffaabbccdd" <- ein HEX mit ANführendem Leerzeichen und länger al 6 stellen.
Bei HEX soll er allerdings nach der 6 Stelle cutten und ein evtl. führendes leerzeichen soll weg.

Kann man das mit RegExp gleich machen ? Oder komme ich um einzelnes Zerlegen und Abfragen nicht herum ?
Man könnte natürlich fallunterscheiden, ob anführendes Leerzeichen existiert oder wenn HEX-wert da ist, dann cut nach der 6. Stelle (will es ja in Farbwerten weiterverarbeiten)

nochmals Riesen-DANKE
 

Jochen
Gast





BeitragVerfasst am: 18. Feb 2003 17:21   Titel: Re: Größeres Problem mit RegExpr. ... Jochen ? ;-)

Hi, mal wieder!

Sorry, hatte diesen Thread schon aus den Augen verloren. Das angesprochene Problem habe ich nicht bedacht: Wenn eine Folge von Hex-Ziffern länger als 6 Ziffern auftaucht, wird über die 2. Variante getroffen, da die Regexps immer einen möglichst langen Treffer abdecken wollen. Gehe am besten so vor, dass Du mittels Deiner php-Funktionen eine Zeile einfach mehrfach auf Treffer überprüfst. Die Regexps wären dann "#col *[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]" und "#col *[^ ]+( |$)". Die Regexp-Funktionen müssen dann irgendwelche Mittel bieten, die Zeichenketten, auf die die regexpe passen, zu identifizieren, damit man sie mit handelsüblichen Zeichenketten-Funktionen herauskopieren und weiterbehandeln kann.

Mit den o.a. Regexps dürfte das Problem mit den zu langen Treffern nicht mehr auftauchen. Weiter kann ich Dir aber nicht mehr helfen, da ich wie gesagt PHP nicht kenne.

Jochen
 

Beiträge vom vorherigen Thema anzeigen:   
     Pro-Linux Foren-Übersicht -> Programmieren - Allgemein Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehen Sie zu:  

Powered by phpBB © phpBB Group
pro_linux Theme © 2004 by Mandaxy