Text innerhalb eines BBCodes nicht matchen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anwenden
besitzen
code
dank
entfernen
ergebnis
ersetzung
falle
folgendem beispiel
gleiches problem
http
kombination
not
problem
schein
stelle
string
url
verbindung
video
-
Moin,
ich stehe mal wieder vor einem Regex-Problem. Generell geht es darum, eine URL in einem String zu matchen:
https?://(?:.+?\.)?dailymotion\.com/video/[A-Za-z0-9]+
Das funktioniert auch. Das funktioniert aber auch dann, wenn sich diese URL innerhalb eines BBCodes befindet, was es wiederum nicht soll.
Ich möchte aus folgendem Beispiel die URL http://www.dailymotion.com/video/test4 matchen, alle Anderen jedoch nicht:
[tagx='http://www.dailymotion.com/video/test1']http://www.dailymotion.com/video/test2[/tagx] | [tagy]Hello http://www.dailymotion.com/video/test3 World[/tagy] | [tagz]Hello World[/tagz] http://www.dailymotion.com/video/test4
Wie stelle ich das an? Ich habe es bereits mit einer Kombination aus lookbehind und lookahead probiert, jedoch erfolglos. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wie wärs, wenn du alle BB-Tags entfernst? Dann kannst du auf das Ergebnis dein RegEx anwenden und du bekommst nur die eine URL. Ansonsten sind RegEx für / in Verbindung mit BBCodes eher ungeeignet…
-
Das wäre in meinem Falle etwas schlecht. Grundlegend geht es nämlich darum, die gefundenen Ergebnisse mit einem anderen BBCode einzuschließen, so soll aus
[tagx='http://www.dailymotion.com/video/test1']http://www.dailymotion.com/video/test2[/tagx] | [tagy]Hello http://www.dailymotion.com/video/test3 World[/tagy] | [tagz]Hello World[/tagz] http://www.dailymotion.com/video/test4
das werden:
[tagx='http://www.dailymotion.com/video/test1']http://www.dailymotion.com/video/test2[/tagx] | [tagy]Hello http://www.dailymotion.com/video/test3 World[/tagy] | [tagz]Hello World[/tagz] [xxx]http://www.dailymotion.com/video/test4[/xxx]
Da es sich hier im Forenbeiträge handelt, kann ich die bestehenden Tags nicht entfernen. Aber ich darf die Ersetzungen auch nur bei "freistehenden" URLs durchführen. -
ggf hilft dir das hier weiter, hat ein gleiches problem.
http://stackoverflow.com/questions/7695110/link-unlinked-urls-bbcode-regex -
Das sieht zwar nach Overkill aus, tut aber zumindest bei URL-BBCodes, was es soll. Schade, dass lookaheads und lookbehinds eine feste länge besitzen müssen :/
Ich habe es jetzt testweise mal so:
(?<!(\[\/))
Vielleicht reicht das schon :) Danke auf jeden Fall.
EDIT:
Okay, das geht leider nicht. Also müsste ich die BBCodes, in denen die Ersetzung nicht durchgeführt werden soll, manuell hinzufügen. Aber selbst dafür scheine ich zu blöd:
lookbehind assertion is not fixed length
-->
(?<!(\[\/url\]|\[\/quote\]|\[\/url=))
Beitrag zuletzt geändert: 2.6.2013 18:05:01 von fabo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage