-2

私のウェブサイトには、シンプルなBBコードシステムが必要です。特別なことは何もありません。今のところ、ハイパーリンクと画像だけで問題ありません。

私は正規表現が苦手です。限目。しかし、誰かが私に例を見せてくれれば、それを把握して別のタグに複製できるかもしれません。

あなたの助けは非常にありがたいです!

4

2 に答える 2

4

これはどこかに無料で存在することを想像する必要がありますが、これが私がそれを行う方法です。

// Patterns
$pat = array();
$pat[] = '/\[url\](.*?)\[\/url\]/';         // URL Type 1
$pat[] = '/\[url=(.*?)\](.*?)\[\/url\]/';   // URL Type 2
$pat[] = '/\[img\](.*?)\[\/img\]/';         // Image
// ... more search patterns here

// Replacements
$rep = array();
$rep[] = '<a href="$1">$1</a>';             // URL Type 1
$rep[] = '<a href="$1">$2</a>';             // URL Type 2
$rep[] = '<img src="$1" />';                // Image
// ... and the corresponding replacement patterns here


// Run tests
foreach($DIRTY as $dirty)
{
    $clean = preg_replace($pat, $rep, $dirty);

    printf("D: %s\n", $dirty);
    printf("C: %s\n", $clean);
    printf("\n");
}

出力:

D: Before [url]http://www.stackoverflow.com[/url] after
C: Before <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> after

D: Before [url]http://www.stackoverflow.com[/url] [url]http://www.google.com[/url] after
C: Before <a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a> <a href="http://www.google.com">http://www.google.com</a> after

D: Before [url=http://www.stackoverflow.com]StackOverflow[/url]
C: Before <a href="http://www.stackoverflow.com">StackOverflow</a>

D: Before [img]https://www.google.com/logos/2012/haring-12-hp.png[/img] after
C: Before <img src="https://www.google.com/logos/2012/haring-12-hp.png" /> after

追加するパターン要素ごと$patに、要素を追加する必要があります$rep。配列は単なるテストケースの$DIRTYリストであり、十分と思われる任意の長さにすることができます。

ここで重要な部分、および使用する部分は、$patand$rep配列とpreg_replace()関数です。

于 2012-05-05T02:00:10.683 に答える
3

ユーザーがシンプルなものを求めたので、私は彼にシンプルなものを与えました。

$input = "[link=http://www.google.com]test[/link]";
$replacement = preg_replace('/\[link=(.*?)\](.*?)\[\/link\]/', '<a href="$1">$2</a>', $input);

ここ/\[link=(.*?)\](.*?)\[\/link\]/で、は正規表現、<a href="$1">$2</a>は形式、$inputは入力/データ、$replacementは戻り値です。

于 2012-05-05T01:55:25.437 に答える