合わせたいパターンは[{Any text between here}]
私の正規表現:
/\[\{[\W\w]*?\}\]/
私は使っているpreg_match_all()
これまでのところ機能していますが、より良い解決策があるかどうか疑問に思っていましたか?
を含む一致を見つけて[{
から}]
使用する場合
/\[\{[^}]+\}\]/
テキスト内で一致させたい場合は、
/(?<=\[\{)[^}]+(?=\}\])/
内部のテキストに文字が含まれている可能性がある場合}
([{hello} yellow}]など)、上記の両方の正規表現パターンでに[^}]+
置き換えます。.+?
元のパターンは、遅延演算子を使用していないため、パフォーマンスが向上します?
。
あなたはそれを単純化するかもしれません
\[\{.*?\}\]
あるいは
\[{.*?}]
しかし、それ以外はかなり良さそうです。
編集
正規表現は必要なことを行いますが、遅延演算子を使用しているため、パフォーマンスは最適ではないことに注意してください。
RegexBuddy のようなツールでレビューすると、この正規表現はソリューションに到達するのに21 ステップ必要ですが、@Ωmega のソリューションは5 ステップしか必要としません。
この正規表現を使用する(?<=\[\{)(.+?)(?=\}\])
キー「U」は、正規表現エンジンを貪欲にしないようにします:
preg_match_all('_\[{.*}\]_U', '[{safda}adsfsf}}][{safda}adsfsf}}]', &$matches);
与える $matches
:
Array
(
[0] => Array
(
[0] => [{safda}adsfsf}}]
[1] => [{safda}adsfsf}}]
)
)