0

正規表現に問題があります。BBCodeリンクを次のように翻訳したい

[link = www.stackoverflow.com] Stack-Overflow [/ link]

のようなHTMLリンクに

<a href='www.stackoverflow.com'>Stack-Overflow</a>.

私の文字列では、BBCodeで複数のリンクを作成することが可能です。また、htmlをBBCodeに変換する関数も必要です。

私の関数はBBCodeToHTMLです。

$Text = preg_replace('/\[link=([^ ]+).*\](.*)\[\/link\]/', '<a href="$1">$2</a>', $Text);  

HTMLからBBCodeへ:

$Text = preg_replace('/\<a href="([^ ]+).*\">(.*)\<\/a\>/Usi', '[link=$1]$2[/link]', $Text); 

私の問題は、これらの関数にあります。複数のリンクがある場合、それは機能しません。また、1つのリンクをHTMLに翻訳し、逆に翻訳したい場合、リンクの最初の文字しかありません。

誰もが私を助けることができますか?前もって感謝します

4

2 に答える 2

5

最初の問題*は貪欲なので、最初と最後のリンクの間のすべてをキャッチします。簡単な解決策は、欲張りでない修飾子を使用するか[]、グループで許可しないことです。

\[link=([^ \[\]]+)\]([^\[\]]*)\[\/link\]

同様に、逆の場合:

<a href="([^ "]+)">([^<]*?)\<\/a\>

これが貪欲でないバージョンです。リンクを許可[]し、さらに短くなります。

\[link=([^ ]*?)\](.*?)\[\/link\]
于 2009-12-27T11:54:46.917 に答える
0

あなたの問題は貪欲にあります。*使用しますか?欲張りでないようにします。

$Text = preg_replace(
    '/\[link=([^ ]+).*?\](.*?)\[\/link\]/',
    '<a href="$1">$2</a>',
    $Text
);
于 2009-12-27T11:57:17.787 に答える