2016-03-30 9 views
-1

preg_replaceを使用してショートコードを作成しています。Preg_replace with brackets [] inside

$content = preg_replace(
    '%\[social-lock]([^[]*)\[/social-lock]%', 
    $html_str_1. '\1' . $html_str_2 . '<br/>' . $html_js, 
    $content 
    ); 
echo $content; 

私はHTMLコンテンツにこのショートを適用すると、我々はブラウザにその

Below content will be hidden. 

[social-lock] 
Code Vip: Write something here. 
[/social-lock]. 

のようなものの出力を持つことになりますが表示されます:

Below content will be hidden. 
<div class="lock" style="display:none"> 
Code Vip: Write something here. 
</div> 

しかし、私は内部のブラケットを追加した場合HTMLコンテンツ(ソーシャルロック間)は、次のようになります。

Below content will be hidden. 

[social-lock] 
Code Vip: Write something here. [show the brackets here] 
and it will not be hidden. 
[/social-lock]. 

[social-lock] - [/ social-lock]のコンテンツは非表示にする必要がありますが、そうではありません。私は、ショートコードの内容の中に大括弧[]があると思う。 しかし、私は解決策を見つけることができません。

答えて

2

[以外のすべての文字が0から無制限の間であることを示す([^[]*)を使用しているため、これは壊れます。だからあなたの文字列には[で止まります。

これを解決するには、(.*?)を使用します。これは、0と無制限の時間の間にすべてを取得すると言いますが、遅延します。また、フラグsを設定してください。したがって、.も新しい行にマッチすることができます。

+0

また、私のコードは '[social-lock]'を置き換え、内部の内容を新しいdivに入れます。私は '(。*?)'を試みたが、運はなかった。 –

+0

@AluminumGates私が言ったように、あなたはまた、フラグ 's'を設定する必要があります:https://regex101.com/r/zR1rC5/1 – Rizier123

+0

あなたは私の命を救った!私は/ sを忘れました。ありがとう! –