Ja, natürlich steht der eigentliche RegEx noch dazwischen. Nach "> schaue ich jetzt zusätzlich an beiden Enden, trotzdem ist nichts mehr sichtbar. Ich muß doch außer nach der eigentlichen URI jetzt auch noch auf den darüberzulegenden Text prüfen? Am besten wäre natürlich, ich fände eine Erklärung wie ich den Untergruppen Namen wie uri_ziel und uri_text geben kann, damit es nicht mehr darauf ankommt, exakt so zu zählen wie es der Parser tut.
Ranma
Kannst du mal den vollständigen Funktionsaufruf posten? also inklusive Backreferences - und am besten auch noch ein Beispiel-String mit URL und Linktext.
Am besten wäre natürlich, ich fände eine Erklärung wie ich den Untergruppen Namen wie uri_ziel und uri_text geben kann, damit es nicht mehr darauf ankommt, exakt so zu zählen wie es der Parser tut.
Auf Stack Overflow findet sich ein Beispiel mit preg_match():
http://stackoverflow.com/questions/6971287/named-capture-in-php-using-regex
Mit preg_replace() soll dies demnach nicht funktionieren
Das bei Stackoverflow zeigt nur das normale Array. Damit hatte ich es vor der Verwendung von preg_replace() versucht. Das hat, so weit ich das verstanden habe, nichts mit den Untergruppen zu tun, auf die man mit \0 \1 \2 und so weiter zugreift. Die soll man angeblich auch benennen können.
Ich versuche es noch mit einer Verzweigung (damit habe ich auch anderswo noch ein Problem) bevor ich das Beispiel hierher kopiere.
Ranma
Das hat, so weit ich das verstanden habe, nichts mit den Untergruppen zu tun, auf die man mit \0 \1 \2 und so weiter zugreift. Die soll man angeblich auch benennen können
Der Aussage des Antwortgebers auf Stack Overflow zufolge funktioniert die Benennung wie gesagt nicht mit preg_replace(). Eine vergleichbare Möglichkeit gibt es vielleicht in anderen Sprachen wie Python - in PHP soll dies aber nicht möglich sein.
Mist! Tatsächlich ausschließlich in Python und .NET !
Ranma
Aber andererseits, was wird dann auf
http://php.net/manual/en/regexp.reference.back-references.php
erklärt?
Ranma
Mit preg_match() kann man ja darauf zugreifen.
Ebenso (etwas umständlich) mit preg_replace_callback(), wie in der Antwort von Dimitry in diesem Thread auf Stack Overflow beschrieben:
http://stackoverflow.com/questions/5255149/named-backreferences-with-preg-replace
preg_replace() kennt dagegen nur die numerischen Back-References
Ich habe das Problem jetzt gelöst. Der RegEx ist immernoch (oder wieder) der, den ich im dritten Beitrag angegeben und als perfekt bezeichnet habe. Nur nach dem BB-Code für eine URI mußte ich extra suchen und das war etwas problematisch, weil mein RegEx so ziemlich alles als Ende einer URI akzeptiert. Dadurch war die Grenze nicht ganz klar und ich brauchte eine Art Mittelmaß zwischen gierigem und ungierigem Verhalten. Also habe ich den Modifikator Ungreedy gesetzt und dann über eine while-Schleife (mit einem preg_match() als Bedingung) das optimale Mittelmaß erreicht.
Schon wachsen die Ansprüche. Weil hier die meisten Beiträge sofort erscheinen, aber Beiträge, die einen Link enthalten, erst geprüft und danach freigeschaltet werden, bin ich auf die Idee gekommen, daß ein im Text befindlicher Link doch gleich auch noch automatisch überprüft werden könnten. Man kann im Prinzip jede Netzseite in einen String einlesen und den überprüfen, man muß nur wissen, wie die Netzseite heißt. Das heißt, ich muß irgendwie eine Funktion bauen, die die Treffer meines RegEx auflistet und dann die entsprechenden Ziele in String-Variablen einliest. Bei der Gelegenheit kann man gleich noch auf Backlinks prüfen.
Darüber muß ich nun erstmal noch eine Weile nachdenken. Außerdem hätte ich gleich noch eine Frage dazu: Wohin müßte ein Link verweisen, damit der betreffende Beitrag hier NICHT freigeschaltet würde? (Das ist KEINE Kritik, sondern ich will versuchen, die Regeln zu automatisieren.)
Ranma
Ursprünglich ging es in diesem Thread ja um Regexe für URIs. Ich habe mal die anderen Beiträge, in denen es um Spam-Erkennung, Plagiate etc. geht, in einen eigenen Thread abgetrennt und dorthin auch die zuvor abgetrennten Postings verschoben:
Maßnahmen gegen Plagiate, Spambots etc.
Hier bitte nur noch posten, wenn es um den URI-Regex in PHP geht :)