Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Auf Kriegsfuss mit Regulären Ausdrücken (https://www.delphipraxis.net/41691-auf-kriegsfuss-mit-regulaeren-ausdruecken.html)

phlux 7. Mär 2005 11:25


Auf Kriegsfuss mit Regulären Ausdrücken
 
Hallo!
Bin hier gerade am verzweifeln, ich schreibe für mein PHP Projekt einen kleinen Textparser der mir in einem Text alle Stellen vonm typ [URL|Beschreibung] in
Code:
[url="URL"]Beschreibung[/url]
ändern soll, so weit so gut das kann er ja jetzt :stupid:
Allerdings wollte ich eine Zusatzfunktion einbauen, dass er alle einfach vorkommenden URL's auch in die <a>-tags packt. Doch das dumme ist jetzt das diese Funkion auch schon vorhandene <a>-Tags aufmischt so das man ein Ergebnis dieser Sorte erhält:
Code:
[url="<a href="][/url]">Beschreibung</a>
Das ist natürlich sch...lecht also hab ich mir gedacht wenn schon href=" vor der url steht sollte er das dingen nicht mehr parsen, allerdings verzweifle ich jetzt an dem RegExp Ausdrück dafür, meiner sieht wie folgt aus:
Code:
[^(href\=\")](http\:\/\/)([\w|-|_|/|\.]+)
Doch so wie er da steht spuckt er mir kein ergebnis aus, egal ob ich jetzt einfach eine URL als zielstring nehme oder eine url mit href=" voraus :|
Weiß jemand wo der Hund in dem Ausdruck begraben ist? Bin für jede Hilfe dankbar!

mfg phlux :hi:

SubData 7. Mär 2005 11:28

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Du musst theoretisch nur filtern ob direkt vor der URL ein " ist... Wenn das der Fall ist, dann is die URL in nem a Tag, ansonsten nicht ;>

phlux 7. Mär 2005 11:36

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Ja auch wenn ich nur nach dem " gucke funzt es nit :wall:

moritz 7. Mär 2005 12:18

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Was hältst du von einem Ausdruck, der etwa so aussieht?
Code:
  $result = pref_match("/\[(.*)\|(.*)\]/", $input, $result);
  echo "<a href=\"{$result[2]}\">{$result[1]}</a>";
(Ungetestet)

opfer.der.genauigkeit 7. Mär 2005 12:22

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Vielleicht ist das hier genau was du suchst.

Zitat:

In diesem Beispiel durchsuchen wir einen text nach irgendwas und ersetze es durch einen Link – so wie offizieller BB-Code:

$string = eregi_replace("\\[url=([^\\[]*)\\]([^\\[]*)\\[/url\\]","<a href=\"\\1\" target=\"_blank\">\\2</a>",$string); -na? Alles klar? *g* - Guckt’s euch mal genau an: Die erste klasse steht hinter dem und – sie wird als \\2 wiedergegeben.
Hier zu finden: Hier

phlux 7. Mär 2005 12:30

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
wohoo moment leute, den fall den ihr jetz hier beschreibt hab ich schon längst, es geht nur darum das ich es nicht gebacken kriege, das er zwischen einem einfachen http://www.irgendwas.de (gut) und einem blabla (pfui) unterscheiden kann und mir letzteres nochmals zerpflückt.

moritz 7. Mär 2005 12:32

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Das macht mein regulärer Ausdruck ;)

phlux 7. Mär 2005 12:39

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Moment, dein Audruck zerpflückt zB [blabla|blubblub] in blabla oder sehe ich das falsch?=

moritz 7. Mär 2005 12:49

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Tut er *g* Das wolltest du doch, oder? :gruebel:

phlux 7. Mär 2005 13:09

Re: Auf Kriegsfuss mit Regulären Ausdrücken
 
Nope, wie bereits oben beschrieben habe ich 2 RegExp:

RE1: liest alle [url|text] aus und wandelt sie passend ins <a href... um! den habe ich bereits
RE2: soll alle einfachen http:// urls auslesen und sie dann in einen <a href verweis umwandeln

wenn ich jetzt re1 aauf den text anwende ist alles iO wende ich allerdings re2 danach noch an wandelt er mir die bereits zu <a href verweise nochmals in einen verweis um, also in <a href="<a href="http: ...
das will ich nicht, also habe ich mir überlegt soll re2 nur greifen, wenn kein " oder ein lerzeichen vor der url steht, das habe ich ansatzweise versucht mit
Code:
[^(href\=\")](http\:\/\/)([\w|-|_|/|\.]+)
zu realisieren, klappt allerdings nicht, weil er so garnichts findet und genau bei dem Ausdruck brauch ich jetzt hilfe, also er soll gucken ob ein " vorsteht, dann finger weg, steht nix (zeilenanfang) oder ein leerzeichen davor dann wandel ihn in ein <a>-Tag um, ich hoffe das war jetzt verständlicher :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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