Dziękuję, działa

Mi chodziło bardziej o to:
<?php
$text = "[[tekst|tekstowy]]";
$pattern = '/[[(.*?)|(.*?)]]/';
$replace = '<a href="index.php?page=search&key=1">2</a>';
?>
a z tym \1 i \2 to prawie tak samo jak w skryptach bashowych....

Hmm pomyliłem z SQL i jako dowolny ciąg znaków wstawiłem % i stąd całe nieporozumienie.
I mam tylko jedno pytanie dlaczego (.*?) ?
Korzystając z tego:
# . - dopasowanie do każdego znaku oprócz nowego wiersza
# | - start alternatywnych rozgałęzień (jak OR)
# ( - początek ciagu
# ) - koniec ciągu
# * - powtórzenie zero lub wiecej razy
?
bo jedyne co by mi nie pasowało to znak zapytania, ale nie wiem, czy dobrze kombinuję.
@kaapa:
Twój sposób może też dobry i prostszy, ale czy przypadkiem jeśli w filtrowanym tekście pojawie się np "luźny" znak | to czy go nie zamieni?