In de eerste plaats gebruik je de backreferences verkeerd. Deze wijzen terug naar groepen die je definieert in het pattern middels haakjes ( ). In het target gedeelte staat niet zo'n groep, die zul je er dus niet uitvissen.
Ten tweede ziet het eruit alsof het pattern gekopieerd is van het pattern om UBB om te zetten naar een html link. Das niet erg, maar dan moet je wel proberen te begrijpen wat het in eerste instantie deed en wat je dus moet veranderen. Laten we het patern even doorlopen:
\\<a href=\"
([^\\\[]*)\\]([^\\\[]*)\" target=\"\\\">\\</a>
De eerste groep. Hierin match je meermaals (door de *) een karakter dat valt binnen de klasse die wordt gedefinieerd tussen de blokhaken. Na escapen staat daar ^] oftwel elk karakter behalve een sluitende blokhaak. Wat je eigenlijk wil is dat elk karakter behalve een dubbele quote matched, dat is immers de afbakening van de href.
\\<a href=\"([^\\\[]*)
\\]([^\\\[]*)\" target=\"\\\">\\</a>
Na de eerste groep komt er volgens jou een blokhaak. denk niet dat die in een url staat. Hence geen match. Wat hier wel zou moeten staan is een dubbele quote en een spatie. Dat zijn immers de karakters die na de inhoud van een href attribuut staan.
"\\<a href=\"([^\\\[]*)\\]
([^\\\[]*)\" target=\"\\\">\\</a>"
Een nieuwe groep, de karakterklasse is hetzelfde als binnen de href. Alles behalve een "]" matched hier dus. Wat je ermee wil bereiken weet ik niet. Maar we hebben hem hier niet nodig.
"\\<a href=\"([^\\\[]*)\\]([^\\\[]*)\"
target=\"\\\">\\</a>"
Om een backreference te genereren gebruik je geen "\\". Daarvoor moet je een subpattern definiëren, dat is wat ik hierboven steeds aanduidde als een groep. Dat wil zeggen haakjes openen en melden wat er moet matchen.
Hoe moet ie dus wel:
PHP:
1
2
3
| $pattern = "\\<a href=\"([^\"]*)\" target=\"([^\"]*)\">([^\<]*)</a>";
$replace = "[url href=\\1 target=\\2]\\3[/url]";
eregi_replace($pattern,$replace, $bericht); |
[
Voor 29% gewijzigd door
T-MOB op 17-10-2005 13:44
]