RegExp - Was ich ja vermisse

  • ... ist eine Site, die einem mal so richtich klar erklärt, wie dat geht.
    Also nicht nur eine Auflistung der Befehle mit anschließendem Livetest: Das gibts schon.
    Auch keine Site, die nur die Befehle auflistet und ein paar wirre Beispiele in "Programmers Language" enthält.


    Ich suche ne Site, wo mir in Dummy-Sprache erklärt wird, wie ich zB einfach alle HTML-Tags rausstrippe (<[^>]+>) (Danach mußte ich Stunden suchen) oder wie ich zB Tags wie <img src="../bilder/bild1.jpg" alt="individueller Bildtext" /> entfernen kann, wenn sich die src bei vielen Tags unterscheidet.
    Oder wie ich je 1.000 Zeichen in ein <p></p> packen kann, aber nur, wenn der Satz nicht unterbrochen wird.
    Oder wie ich alle Sonderzeichen, wie "&" entfernen und ersetzen kann, dabei aber keine "&uuml;" etc. zerstöre...


    Solche Sachen eben, die man eigentlich immer mal wieder braucht im täglichen Leben, wenn man mit viel Text rumhantiert.


    Falls es so ne Site noch nicht gibt, wäre das sicher ne gute Idee sie zu machen^^

    Wer zuerst "Datenschutz" sagt, hat verloren.

  • Das Problem dabei ist ja aber, dass Du da dann auch Beispiele haben möchtest. In Deinem Fall wäre es z.B. das "&" betreffend, andere möchten ein anderes Zeichen. Bei Dir ist es <a>, andere möchten aber <iframe>. Daher kann man das gar nicht als Beispiel liefern und auch noch erklären, wäre viel zu viel Aufwand. Gut, machen kann man das schon ;)


    Ich für meinen Fall nutze sehr gerne die beiden Seiten hier. Sind recht technisch, aber auch gut erklärt und daraus kann man sich dann recht vieles selbst zusammenbauen:
    *** Link veraltet ***
    *** Link veraltet ***

  • Ein Problem ist auch, dass RegExp unterschiedlich implementiert sein kann. Zum Beispiel gready match ja/nein oder implizierte Links- vs. Rechtsklammerung. D. h. je nach Anwendung/Programmiersprache müssen die konkreten Formeln evtl. unterschiedlich aussehen.


    Sowas wie <[^>]+> ist recht simpel:
    < genau eine öffnende spitze klammer
    ^> keine schließende spitze Klammer
    [^>] beliebige Symbole, außer einer schließenden spitzen Klammer (optional)
    [^>]+ beliebige Symbole, außer einer schließenden spitzen Klammer (mindestens 1 Symbol, beliebig viele insgesamt)
    > genau eine schließende spitze klammer

  • Synonym:
    Ja also DAS lässt sich auch noch für Dummys in einem Halbsatz verständlich erklären:


    Man macht ein Beispiel anhand des tags <a> und schreibt drunter: "Setze das für Deine Zwecke benötigte Tag ein (<iFrame>, <img src> etc)"


    @malte:
    Und genau das meine ich: Ich lese es. Lese nochmal. Meine, zu verstehen und nach 1 Minute weiß ichs nicht mehr^^
    Aber ich wills ja nicht verstehen - ich will ja nur ein Beispiel, das ich dann anpassen kann.

    Wer zuerst "Datenschutz" sagt, hat verloren.

  • Ja eben nicht unbedingt. Man kann nicht alles beliebig mit anderen Werten ersetzen. Ein IMG hat als Ende einfach ein "/>" wohingegen ein a oder iframe aber ein </xxx> haben. Nun könnte man denken, man sucht einfach nach dem Abschließenden ">", aber das reicht auch nicht unbedingt. Beim img würde es gehen, beim <a> kann aber beim Linktext auch ein <span>, <b> oder sonstwas kommen, muss also nicht das Ende von </a> sein.


    Zitat

    Aber ich wills ja nicht verstehen - ich will ja nur ein Beispiel, das ich dann anpassen kann.


    Dafür muss man es aber zumindest in der Grundform verstehen. Bei den regex reicht schon ein anderer Flag, bzw. das Vorhanden- bzw. Nichtvorhandensein, oder ein Zeichen an der falschen stelle und das Teil macht was ganz anderes als gedacht ;)

  • Hi,


    schau mal hier: *** Link veraltet ***


    dort findest Du unter Tools and Languages auch eine Beschreibung von
    RegExBuddy. Ich benutze es mit Begeisterung zum Konstruieren und Testen
    von RegEx.


    Ein schönes WE ...

    Sie dürfen nicht alles glauben was sie denken!

    (Heinz Ehrhardt)

  • Ich mal wieder - mit meinem Freund RegExp^^


    Kann mir jemand verraten wie ich aus einem tag der so aussieht:
    <a href="meine-somain.de/link-zum-file.htm#anker">link</a>
    sowas machen kann:
    <a href="meine-somain.de/link-zum-file">link</a>


    also das .htm#ankertext entfernen.
    Das .htm# wegzumachen ist ja einfach, aber da die Ankertexte immer differieren, brauche ich RegExp und dazu bin ich zu doof.

    Wer zuerst "Datenschutz" sagt, hat verloren.

  • Kommt nun drauf an, wie das aufgebaut ist. Also ob der Link an sich mit erfasst werden muss oder ob die URL alleine reicht bzw. das Vorhandensein von ".htm#irgendwas"


    Dann auch darauf, aus was das "irgenwas" bestehen kann. Buchstaben? Zahlen? Groß / Klein ? Und auch, wo oder wie Du die verwenden willst.


    '/\.htm#anker/'
    ^^ wäre also der exakte Treffer


    '/\.htm#([a-z]+)/'
    ^^ Kleinbuchstaben müssen folgen


    '/\.htm#([a-z0-9]+)/'
    ^^ Kleinbuchstaben und/oder Ziffern müssen folgen

  • AAAAAAAAAAAAAARGH!
    Ihr RegExp-Typen...


    Ich muß nur aus einem Ordner alle URLs bereinigen, die zB meine-domain.de/dingsbums.htm#anker-der-variiert-aber-in-kleinbuchstaben-aber-gelegentlich-mit-zahlen-gespickt-ist
    damit das danach so aussieht:
    meine-domain.de/dingsbums

    Wer zuerst "Datenschutz" sagt, hat verloren.

  • Catcat, dann ist es letztere Version, sollte zumindest damit ausreichen. Aber das ist eben nur der Pattern selbst. Daher ja der Punkt, wo Du die verwenden willst. Eine RegEx entfernt / löscht oder ändert so gesehen ja erst mal nichts, sondern matched oder matched nicht. Mit dem Ergebnis arbeitet dann eine andere Funktion und macht was damit.


    z.B. PHP preg_replace():
    *** Link veraltet ***


    Code
    [COLOR=#000000][COLOR=#0000BB]$zeichenkette [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]'Das ist der Text mit dem [/COLOR][/COLOR]<a href="meine-somain.de/link-zum-file.htm#anker">link</a> [COLOR=#000000][COLOR=#DD0000]mit dem dazwischen.'[/COLOR][COLOR=#007700];
    [/COLOR][COLOR=#0000BB]$suchmuster [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]'[/COLOR][/COLOR]/\.htm#([a-z0-9]+)/[COLOR=#000000][COLOR=#DD0000]'[/COLOR][COLOR=#007700];
    [/COLOR][COLOR=#0000BB]$ersetzung [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]''[/COLOR][COLOR=#007700];
    echo [/COLOR][COLOR=#0000BB]preg_replace[/COLOR][COLOR=#007700]([/COLOR][COLOR=#0000BB]$suchmuster[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]$ersetzung[/COLOR][COLOR=#007700], [/COLOR][COLOR=#0000BB]$zeichenkette[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]


    Also das Suchmuster ist der Pattern, die Ersetzung in dem Fall eben nichts " und String eben der String. Aber das halt bei PHP. Andere "Sprachen" arbeiten anders. Manche Programme / Editoren wieder anders. Was aber fast immer recht gleich / ähnlich bleibt ist das Suchmuster selbst.


    Bei mir im uEdit würde es etwa so aussehen:
    .htm#^([a-z0-9]+^)
    Also das \ am Anfang versteht der nicht und die () müssen jeweils mit einem "^" übergangen werden. Aber auch so würde er alle ".htm#axc" ersetzen.