0

私はこれを理解するのに苦労しています:

このようにフォーマットされたいくつかのリンクを含む文字列 ($data) があります。

[pagelink]Folder/File[/pagelink]

$data には、これらのリンクが複数含まれています。

これらのリンクを実際のhtmlリンクに置き換える必要があり、それを行うための次のコードがあります(これは機能します):

$data = preg_replace('/\[pagelink\](.*?)\[\/pagelink\]/is','<a href="$1">$1</a>',$data);

ここで、リンク自体を実際に変更せずに、ユーザーに表示されるリンクの一部からすべての「フォルダー」インスタンスを削除したいと思います。つまり、リンクが次の場合:

[pagelink]Folder/File[/pagelink]

私はそれがこれになることを望みます:

<a href="Folder/File">File</a>

私が試したのはこれです:

$data = preg_replace('/\[pagelink\](.*?)\[\/pagelink\]/is','<a href="$1">'.( strstr($1) === false ? $1 : str_replace('/','',strstr($1)) ).'</a>',$data);

しかし、大量のエラーが発生するため、この方法で後方参照を使用することはできないと思います。

私を助けてくれませんか?ありがとう

4

4 に答える 4

0

答えてくれてありがとう!実際、私は別の解決策も見つけました。

preg_replace_callback もこれに対して機能し、これも機能することを思いつきました:

$data = preg_replace_callback('/\[pagelink\](.*?)\[\/pagelink\]/is',function ($matches) { return '<a href="'.$_SERVER['PHP_SELF'].'?p='.$matches[1].'">'.( strstr($matches[1],'/') === false ? $matches[1] : str_replace('_',' ',str_replace('/','',strstr($matches[1],'/'))) ).'</a>'; },$data);

しかし、あなたの提案は素晴らしく、とても役に立ちます! ありがとう!

于 2013-11-05T16:31:11.527 に答える
0

それはBBコードのように見えます。PHP にはそのための拡張機能があります。

http://www.php.net/manual/en/function.bbcode-create.php

コメントの 1 つは、ライブラリの PHP 実装へのリンクです。

preg_replace() の置換をコンパイルするロジックが必要な場合は、preg_replace_callback() を使用します。

于 2013-11-05T09:13:56.797 に答える