1

ブラケット間のテキストをキャプチャするこの小さなコードがあります。

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place]';    
preg_match_all('/\[([^\]]*)\]/', $string, $matches);
print_($matches[0]);

私が得るものは次のとおりです。

    配列(
      [0] => [タイトル=私のタイトル]
      [1] => [maps:クールな場所]
    )

「[some-not cool]」または「[another+stuff]」を避けるために、より制限を加えたいので、[some:thing] と [some=thing] のみをキャッチする必要があります。

どうすればいいですか?

4

2 に答える 2

2

これにより、「=」または「:」を含むすべてがキャッチされ、その他は無視されます。

$string = '[title=my title] http://bit.ly/gANFxi [maps:some cool place] [some-not cool] or [another+stuff]';
preg_match_all('/\\[([^\\]]*[\\=|\\:][^\\]]*)\\]/', $string, $matches);
print_r($matches[0]);

これでうまくいきますか?それとも、さらに要件がありますか?つまり、これは "[some stuff=some:thing]" を返しますが、そうすべきでしょうか? (複数の単語と「=」と「:」の両方に注意してください)。

于 2011-11-28T00:58:06.867 に答える
1

コロンまたはイコールの前の部分を文字のみで構成する必要がある場合は、次のコードを使用できます。

preg_match_all('/\[([a-z]+[:=][^\]]+)\]/i', $string, $matches);

最初の部分が PHP 識別子 ( $を除く) に似ている場合は、次のコードを使用できます。

preg_match_all('/\[([a-z_]+[a-z0-9_]+[:=][^\]]+)\]/i', $string, $matches);
于 2011-11-28T01:10:58.657 に答える