![]() |
Re: [PHP] Regulärer Ausdruck zum Filtern eines Hyperlinks
Vorgeschichte: ich nutze ein kleines CSharp-Programm und erstelle damit aus der SQL-Datei meiner Datenbank eine angepasste Version (Umlaute werden konvertiert, Kommentare können ggf weggelassen werden, usw.). Jetzt stecken in der SQL-Textdatei noch meine Suchanfragen à la
Code:
Wenn ich schon mal dabei bin, will ich die gleich mit umwandeln und die HTML-Zeichen < und > durch eckige Klammern ersetzen. Ich habe das Anfragemuster quasi 1:1 aus der PHP-Version übernommen:
<google>irgendwas</google>
Code:
searchEngines ist ein String "google|heise|heisenews|...|thumb". ?<tag> ist eine Gruppierung, die sicherstellen soll, das am Anfang der selbe Tag, etwa "google", steht wie am Schluss. Jetzt tritt das gleiche Problem wieder auf. Diese Tags
string pattern = string.Format
(@"<((?<tag>{0})(=(.*))?)>(.*[^<*]?)<\/(\k<tag>)>", searchEngines);
Code:
werden anstandslos gefunden. Kommt am Schluss aber noch ein Google dazu:
<google>bla</google> <heise>text</heise>
Code:
findet der String nur das erste und letzte "google" und nimmt alles dazwischen als Text. Wieso? :gruebel:
<google>bla</google> <heise>text</heise> <google>foo</google>
Bevor das Missverständnis kommt: ich habe der Einfachheit halber die spitzen Klammern genommen! In den beiden Beispielen am Schluss meine ich damit die HTML-Zeichen < und >, so wie in der Suchanfrage gezeigt. |
Re: [PHP] Regulärer Ausdruck zum Filtern eines Hyperlinks
Hab mir nicht die ganzen Beiträge davor durchgelesen, eine vereinfachte Version deines Regexes läuft bei mir jedenfalls durch:
Code:
Das Problem war der greedy *-Operator zwischen den Tags ("(.*[^<*]?").
<(?<tag>google)(=(.*))?>(.*?)</(\k<tag>)>
|
Re: [PHP] Regulärer Ausdruck zum Filtern eines Hyperlinks
Das Ergebnis ändert sich bei mir nicht. Meine Suchtags im Blog arbeiten nach der Syntax
Code:
Also im Prinzip wie das Suchtag in der DP. Hier mal einen kurzen Textauszug aus einem Beitrag. Damit es nicht so blöd aussieht, nehme ich wieder die spitzen Klammern:
<suchmaschine>Suchbegriff(e)</suchmaschine>
<suchmaschine=Suchbegriff(e)>Text für Beitrag</suchmaschine> Zitat:
Zitat:
Edit: So geht es (?)
Code:
Wieso auch immer. Ich bin gerade im Linux und klicke mich durch meine Beiträge durch. Aber der oben zitierte wird völlig korrekt angezeigt. Hm...
@"<((?<tag>{0})(=(.*?))?)>(.*?)<\/(\k<tag>)>"
|
Re: [PHP] Regulärer Ausdruck zum Filtern eines Hyperlinks
Huppsala, hab es nur mit deinem Beispielproblem ohne Attribute getestet. Im Attributsteil ist ja noch einmal ein greedy Stern, der dann alles bis zum allerletzten ">blablabl</tag>" frisst. Also zwei *?:
Code:
Matcht
<(?<tag>suchmaschine)(=.*?)?>(.*?)</(\k<tag>)>
Code:
jedenfalls anstandslos. Und entspricht ja dann auch fast deiner Version ;) .
<suchmaschine>Suchbegriff(e)</suchmaschine>
<suchmaschine=Suchbegriff(e)>Text für Beitrag</suchmaschine> <suchmaschine>Suchbegriff(e)</suchmaschine> |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz