Regex-Profi gesucht...

Ronald Nickel

Legendäres Mitglied
Wer kann "reguläre Ausdrücke", lebt max 150 KM von Ulm/Deutschland entfernt und will sich ca 200 Euro für nen halben Tag vorort Regex-Support verdienen.

Gruß Ronny
 
Nanu, jetrzt bin ich aber ein wenig verwirrt. Gibts hier in der Proviliga keinen der "Reguläre Ausdrücke" (Regular Expressions) beherrscht und ein wenig Geld verdienen will?

Hmmm... Schade

Gruß Ronny
 
Vielleicht keinen, der nahe genug bei Dir ist?

Für mich wär der Weg zu weit, und obwohl ich Regexe benutze, würd ich mich nicht als "Profi" darin bezeichnen. Dann ist da noch der Unterschied zwischen den verschiedenen "Sprachen" resp. Regex-Engines - was für mich mit Dotnet stimmt und auch schnell genug ist, muss noch lange nicht für z.B. Perl passen.

Vielleicht hilft Dir der Regexbuddy ( http://www.regexbuddy.com/ ) weiter. Auf der Seite http://www.regular-expressions.info/ gibts ausserdem viele nützliche Tipps und vor allem auch sprachspezifische Beispiele. Und wenn Du wirklich Regexe verstehen willst, wirst Du wohl nicht um das Buch "Reguläre Ausdrücke" von J. Friedl (O'Reilly) drumrumkommen.

Griessli
Irene
 
Also mich wundert es schonm, dass sich kaum einer der mächtigen Waffe Regex bedient. Andererseits wenn ich mir die Synthax anschaue relativiert sich meine Verwunderung.

@Irene
das Buch von O'Reilly habe ich - bringt mich aber wahrscheinlich erst im 2. Step weiter. Denn Regex ist nichts zum Auswendiglernen. Das muss man wirklich verstehen.

Gruß Ronny
 
Wie Irene sagte, bedienen tun sich schon welche, doch erstmal ist das hier kein reines Programmierforum und zum anderen wohnt nicht jeder unbedingt in Süddeutschland. Das Buch von O'Reilly ist aber schon eine recht gute Empfehlung.



MfG Sascha Ahlers
 
QUOTE (ronnic @ Di 29.8.2006, 15:08)Also mich wundert es schonm, dass sich kaum einer der mächtigen Waffe Regex bedient.

Ich tippe eher darauf, daß jeder mit hinreichend umfangreichen Programmierkenntnissen auch RegEx verwendet.

Das Problem dabei ist nur (abgesehen von der räumlichen Bedingung): Obwohl ich auf meiner Domain sogar ein RegEx-Tutorial als Teil meiner Projektdokumentation habe und es bei den Freeware-Tools einen RegEx-Trainer gibt, mit dem man Ausdrücke interaktiv testen kann: RegEx sind einfach so, daß man sich hinreichend hineindenken muß und - macht man dies nicht - auch wieder viel vergißt. Das mache ich dann, wenn ich es brauche - ansonsten vergesse ich das bald wieder und schlage in meiner eigenen Dokumentation nach.

Und auch wenn mich das in Berlin jemand fragen würde, hätte ich wahrscheinlich einfach kein Interesse, das einen ganzen Tag lang zu machen - da gibt es andere, wichtigere Dinge.
 
Reguläre Ausdrücke sind ganz einfach. Viel einfacher als französisch. Jemand der Französisch kann sieht das aber evtl. anders ;-)

Was musst Du denn wissen?

 
Das genau ist das Problem. Klar könnte ich sagen "Ich brauche das Muster oder die Stringfolge" Damit ist es aber nicht getan. Um mir selbst ein Bild vom letztendlichen Nutzen zu machen muss ich Regex verstehen (zumindest meine Meinung)

Muster, wie HTML-Tag die entfernt werden sollen oder auch Texte innerhalb zweier Muster erkennen gehören dazu. Ausnahmeregelungen wie die unbekannte Anzahl von Leerzeichen oder wahrscheiliche Schreibfehler (Burma, Birma)abzufangen dagegen sind schon etwas komplexer.

Kennt den jemand ein Forum aus der C++-Fraktion oder andere Hardcore-Progger?

Gruß Ronny
 
QUOTE Reguläre Ausdrücke sind ganz einfach. Viel einfacher als französisch.

Was die ^`' anbelangt bin ich mit Alain einig.

Sorry Ronny, aber ich wohn zu weit weg.
Regex sind keine Hexerei. Der Hase läuft wie beim lernen einer neuen Prog. Sprache.
Einfach anfangen und dann komplex werden.

Hast du eine Linuxbox zur Verfügung? Oder hast du einen Wampserver auf deinem PC?
Dann steht dir zu Selbststudium nichts im Wege.

Auf der Linuxbox kannst du Strings mit sed manipilieren und siehst das Resultat sofort.
Mit dem Wampserver machst du kleine PHP Progs und manipulierst die Strings mit PHP.

Der aha-Effekt würde dir mehr bringen als einem krack zuzuschauen.

Mit diesem RegEx Tutorial bist du sehr gut bedient. Und wenn's dann mal arg klemmt, dann kannst du dein Problem ja hier posten.

Cheers, René
 
Also, Leude,- hier habt ihr die historische Gelegenheit zu beweisen, das Regexe machbar sind obwohl ich bis dato das gegnteil behaupte.
wink.gif


Wer schreibt mir mal eine Regex wo ich den Inhalt (rot) eines Metatags aus einem Gesammt htmlcode auslesen kann.

<meta name="Keywords" lang="de" content="Austos, KFZ, Fuhrpark">

vielen Dank
Gruß Ronny
 
simpel ...

CODE $html_text = 'abc <meta name="Keywords" lang="de" content="Austos, KFZ, Fuhrpark"> def';
preg_match('#\<meta name\=\"Keywords\" lang\=\"de\" content\=\"(.*)\"\>#i', $html_text , $info_array);
print_r($info_array);



Ausgabe:

Array ( [0] => [1] => Austos, KFZ, Fuhrpark )
 
QUOTE (ronnic @ Do 31.8.2006, 17:51)<meta name="Keywords" lang="de" content="Austos, KFZ, Fuhrpark">

Grobe Lösung:


CODE <meta\b(.*name\s*=\s*(?<t1>"|')keywords\k<t1>\s*.*content\s*=\s*(?<t2>"|')(?<content>.*)\k<t2>.*)/?>


Allerdings: Das ist eine NET-Lösung, getestet mit meinem RegEx-Trainer, die noch dazu offenkundig unvollständig ist.

Hinweise:
  • nach 'meta' kann ein Leerzeichen, Tab, Umbruch kommen, also müssen alle Wortgrenzen abgefangen werden.
  • dazwischen können weitere Attribute notiert werden
  • Die Attributwerte können von einfachen oder doppelten Hochkommata umschlossen werden. Die Prüfung gelingt, indem der Wert benannt gespeichert und später mit \k für die zweite Prüfung herangezogen wird.
  • Da die Attribute auch vertauscht werden können, muß der Inhalt der äußeren Klammer kopiert, per | angehängt und dort die Reihenfolge von name/content vertauscht werden
  • Das Ergebnis steht schließlich in der benannten Gruppe 'content' drin
PS: Zusätzlich enthält die Lösung noch einen systematischen Fehler.

Wer findet den Fehler?

Zum Nachschlagen: RegEx-Tutorial

Gagget: Schön wäre es, wenn RegEx und Html so einfach wäre.
 
Also eigentlich ist es einfach ... aber man kann es sich natürlich auch kompliziert machen.

Ich wollte, denke ich, etwas ganz anderes demonstrieren als Sie/Du(ich weiß nicht wie ihrs hier habt).
Nämlich das RegEx durchaus auch mal eben schnell 'machbar' ist.

Klar können da Umbrüche, Tabs usw. sein, und das sollte auch je nach Anforderungen an die RegEx alles mitbedacht werden. Nur das macht man nicht mal eben aus dem Kopf, wie ich das grad oben schnell getan habe.

Mit deinem Beispiel hast du eigentlich eher das Gegenteil bewiesen, nämlich das RegEx nicht 'machbar' ist.

Den der RegEx den du da gepostet hast, würdest du doch mit deinem eigenen Tutorial nicht mehr unter ner Std oder 2 wieder hinkriegen. Und wer von RegEx nun gar keine Ahnung hat, für den ist das eh nur ein Stück String, was er mal in seine Funktion setzt und schaut ob es geht.

Mag vielleicht sein das du da ne Super RegEx konstruiert hast, die alle möglichen Fälle und blödesten Code Variationen wie so ein Meta Keyword Tag aussehen kann abfängt. (Schlecht ist die ja nicht) Aber ob damit jetzt für den Themen Starter RegExe mehr bedeuten, als sonderbare Zeichen die man mit magischen Kräften in die richtige Reihenfolge bringen muss, wage ich zu bezweifeln.

... mhh jetzt hab ich das Sie vergessen ...möge man es mir verzeihen

Gruß G.
 
Die Leistungsfähigkeit von RegEx besteht darin, daß man damit weit über einfaches Suchen/Ersetzen hinausgehen kann und daß man syntaktisch verschiedenartige Inputs, wie sie bsp. bei Html vorkommen können, mit einem einzigen Ausdruck analysieren kann.

@Gagget, dein RegEx läßt sich fast äquivalent ersetzen durch ein Suchen nach

QUOTE <meta name="Keywords" lang="de" content="


und ein anschließendes Suchen nach dem schließenden ", das dürfte i.d.R. auch schneller als ein RegEx sein.

Da deine Lösung aber bei allen anderen, semantisch äquivalenten Eingaben versagt, ist sie schlicht und einfach falsch - genau für solche Probleme verwendet man ja RegEx.


QUOTE (Gagget @ Do 31.8.2006, 20:18)Mit deinem Beispiel hast du eigentlich eher das Gegenteil bewiesen, nämlich das RegEx nicht 'machbar' ist.

Den der RegEx den du da gepostet hast, würdest du doch mit deinem eigenen Tutorial nicht mehr unter ner Std oder 2 wieder hinkriegen. Und wer von RegEx nun gar keine Ahnung hat, für den ist das eh nur ein Stück String, was er mal in seine Funktion setzt und schaut ob es geht.


Für den obigen Ausdruck habe ich höchstens 5 Minuten gebraucht, das war ein Zusammensetzen von links nach rechts und ein Nachschlagen in meinem RegEx-Glossar - das Schreiben des Beitrags hat länger gedauert. Wenn man die Konzepte einmal verstanden hat, dann kann man manche Details wieder vergessen - dann gehen solche noch eher einfachen Beispiele schnell.

PS: Die obige Lösung ist im Augenblick noch systematisch falsch. Man nutze den RegEx-Trainer und hänge zwei meta-Elemente hintereinander, ohne daß ein Return dazwischen kommt. Dann ahnt man das Problem.
 
QUOTE Die Leistungsfähigkeit von RegEx besteht darin, daß man damit weit über einfaches Suchen/Ersetzen hinausgehen kann und daß man syntaktisch verschiedenartige Inputs, wie sie bsp. bei Html vorkommen können, mit einem einzigen Ausdruck analysieren kann.


guter Punkt. Meistens ist es so, dass regex "falsch" eingesetzt werden. Falsch im Sinne von "voreilig"... In vielen Fällen gibt es einfachere und schnellere Möglichkeiten, zum gewünschten Resultat zu kommen.

Für Beispiele wie


QUOTE <meta name="Keywords" lang="de" content="


sollte man lieber strpos (am beispiel von PHP) oder andere Workarounds verwenden, natürlich unter der Annahme, dass wir kein variables Muster haben und das ist meistens der Fall...

Ein gutes Beispiel für das sinnvolle Einsetzen einer regex ist zum Beispiel das Validieren einer email Adresse. Beispiel:


QUOTE $pattern="#^([0-9a-zäöü]+)([._-]([0-9a-zäöü]+))*[@]([0-9a-zäöü]+)([._-]([0-9a-zäöü]+))*[.]([0-9a-z]){2,4}$#i";


Der pattern ist nur exemplarisch, sicher müsste er noch etwas erweitert werden. Es sollte aber deutlich werden, dass hier nach definierten Mustern innerhalb einer Zeichenkette gesucht wird, wobei die Zeichenkette je nach email Adresse immer anders aussieht.
 
QUOTE (Seven @ Fr 1.9.2006, 21:41)$pattern="#^([0-9a-zäöü]+)([._-]([0-9a-zäöü]+))*[@]([0-9a-zäöü]+)([._-]([0-9a-zäöü]+))*[.]([0-9a-z]){2,4}$#i";

Ui - nur so am Rande: Das ist am Ende für gewisse Fälle falsch. Toplevel-Namen beinhalten m.W. nach nur a-z - und inzwischen gibt es die TLD .travel - mit 6 Buchstaben. Da damit auch Mailadressen der Form info@example.travel existieren, wären diese nicht zugelassen.

Man sieht aber an dem Beispiel sehr schön: Um brauchbar RegEx zu verwenden, muß man einiges über die Syntax der Quelldokumente wissen - dieses Wissen wird zusätzlich zu RegEx benötigt.
 
Zurück
Oben