1

私は正規表現にかなり慣れていません。次のようなことができる「BBコード」を分析しようとしました:


パターン:

\[element title=(.*)picture=(\d+)](.*)(?:\[caption](.*):?\[/caption])?\[/caption].*

探す:

[element title=element title picture=32]Lorem ipsum dolor[キャプション]John Doe による写真[/caption][/element]

[要素タイトル=要素タイトル画像=32]ロレム・イプサム・ドーラー[/要素]


キャプション部分はオプションで、両方のエントリで結果が得られるはずです。どうすればこれに到達できますか?

4

2 に答える 2

1

これはどう:

\[element title=(.*)picture=(\d+)\](.*?)(\[caption\](.*)\[/caption\])?\[/element\]

次の両方に一致します。

[element title=element title picture=32]Lorem ipsum dolor[caption]Photo by John Doe[/caption][/element]

[element title=element title picture=32]Lorem ipsum dolor[/element]

PHP では、次のように使用できます。

$regex = '#\[element title=(.*)picture=(\d+)\](.*?)(\[caption\](.*)\[/caption\])?\[/element\]#i';
$text = '[element title=element title picture=32]Lorem ipsum dolor[caption]Photo by John Doe[/caption][/element]';    

preg_match ( $regex, $text, $match );

print_r( $match );

配列$matchにはいくつかの要素があります。(これらは、丸括弧と)正規表現で囲まれた文字列です。そのうちの 1 つがキャプション テキストです。

プログラムの実行と出力は、ここで確認できます http://ideone.com/vQ1T0

于 2012-04-30T20:36:50.920 に答える
0
\[element title=(.*) picture=[0-9]+\](.*)(\[caption\](.)*\[\caption\])?\[/element\]
于 2012-04-30T20:36:37.970 に答える