これを正規表現に置き換えました(phpbbソースコードから取得したものです)。
$match = array(
'#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="(.*?)" target\=\"_blank\">.*?</a><!\-\- \1 \-\->#',
'#<!\-\- .*? \-\->#s',
'#<.*?>#s',
);
$replace = array( '\2', '', '');
$message = preg_replace($match, $replace, $message);
このようなメッセージを実行すると
asdfafdsfdfdsfds
<!-- m --><a class="postlink" href="http://website.com/link-is-looooooong.txt">http://website.com/link ... oooong.txt</a><!-- m -->
asdfafdsfdfdsfds4324
これを返す
asdfafdsfdfdsfds
http://website.com/link ... oooong.txt
asdfafdsfdfdsfds4324
ただし、置換機能にしたいと思います。したがって、href を指定することで、ブロック内のリンク タイトルを置き換えることができます。
URL、新しい URL、新しいタイトルを提供したいと思います。したがって、これらの変数を使用して正規表現を実行できます。
$url = 'http://website.com/link-is-looooooong.txt';
$new_title = 'hello';
$new_url = 'http://otherwebsite.com/';
そして、同じ生のメッセージを返しますが、リンクが変更されています。
<!-- m --><a class="postlink" href="http://otherwebsite.com/">hello</a><!-- m -->
私はそれをこのようなものに微調整しようとしましたが、うまくいきません。一致した結果を構築する方法がわからないため、置換後も同じ形式になります。
$message = preg_replace('#<!\-\- ([mw]) \-\-><a (?:class="[\w-]+" )?href="'.preg_quote($url).'" target\=\"_blank\">(.*?)</a><!\-\- \1 \-\->#', $replace, $message);