Zur Navigation

RegEx (PHP) verhält sich seltsam [2]

URI identifizieren?

11 Ranma (Gast)

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

12.04.2015 02:53

12 Jörg Kruse

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

12.04.2015 18:11 | geändert: 12.04.2015 18:11

13 Ranma (Gast)

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

13.04.2015 01:53

14 Jörg Kruse

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.

13.04.2015 10:35

15 Ranma (Gast)

Mist! Tatsächlich ausschließlich in Python und .NET !
Ranma

14.04.2015 03:30

16 Ranma (Gast)

Aber andererseits, was wird dann auf

http://php.net/manual/en/regexp.reference.back-references.php

erklärt?
Ranma

14.04.2015 04:30

18 Ranma (Gast)

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

17.04.2015 12:37

19 Forum

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 :)

14.05.2015 20:14 | geändert von Jörg: 14.05.2015 20:19

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]