1

PHP関数:

function b($text) {    
  $body="<b>$text</b>";
  return $body; 
}

Preg_Replace:

function replaceTags($body) {    
  $body = preg_replace('!\[b](.*?)\[\/b\]!Uei', "''.b('$1','$2').''", $body, -1);    
  return $body; 
}    

コードは機能します...ある程度。どうやら毎回最初のインスタンスにのみ制限されているようです。コードをコピーしているときに誤ってこれを壊し、互いに挿入すると、内側のタグが太字で表示されました。

例:

*Code:* [b]This is Hi.[/b] Hello world. [b]This is Hi2.[/b]    
*Output:* **This is Hi.[/b] Hello world. [b]This is Hi2.**

preg_replaceを使用するのは初めてです。パターンが少しずれているか、何かが欠けている可能性があると思います。これが、最初のインスタンスのみを表示する理由です。MySQLクエリでもこれを試しましたが、これも1行に制限されています。

ユーザー側に単純なマークアップを利用しようとしていますが、必要に応じてMySQLクエリをカスタムタグとして使用したいと思います(これも機能しますが、最初のレコードのみを表示します)。

ありがとう。どんな助けやアドバイスも大歓迎です。

4

1 に答える 1

0

U正規表現からパターン修飾子を削除します。それinvertsは怠惰な演算子の意味であり、それをにしますgreedy。サポートしたい場合は、 (小文字)UTF-8を使用してくださいu

$body = preg_replace('!\[b\](.*?)\[\/b\]!uei', "''.b('$1','$2').''", $body, -1); 
于 2012-11-08T02:05:26.687 に答える