0

合わせたいパターンは[{Any text between here}]

私の正規表現:

/\[\{[\W\w]*?\}\]/

私は使っているpreg_match_all()

これまでのところ機能していますが、より良い解決策があるかどうか疑問に思っていましたか?

4

4 に答える 4

2

を含む一致を見つけて[{から}]使用する場合

/\[\{[^}]+\}\]/

テキスト内で一致させたい場合は、

/(?<=\[\{)[^}]+(?=\}\])/

内部のテキストに文字が含まれている可能性がある場合}[{hello} yellow}]など)、上記の両方の正規表現パターンでに[^}]+置き換えます。.+?元のパターンは、遅延演算子を使用していないため、パフォーマンスが向上します?

于 2012-07-04T13:56:43.587 に答える
2

あなたはそれを単純化するかもしれません

\[\{.*?\}\]

あるいは

\[{.*?}]

しかし、それ以外はかなり良さそうです。


編集

正規表現は必要なことを行いますが、遅延演算子を使用しているため、パフォーマンスは最適ではないことに注意してください。

RegexBuddy のようなツールでレビューすると、この正規表現はソリューションに到達するのに21 ステップ必要ですが、@Ωmega のソリューションは5 ステップしか必要としません。

于 2012-07-04T13:57:56.813 に答える
1

この正規表現を使用する(?<=\[\{)(.+?)(?=\}\])

于 2012-07-04T13:55:58.590 に答える
1

キー「U」は、正規表現エンジンを貪欲にしないようにします:

preg_match_all('_\[{.*}\]_U', '[{safda}adsfsf}}][{safda}adsfsf}}]', &$matches);

与える $matches

Array
(
    [0] => Array
        (
            [0] => [{safda}adsfsf}}]
            [1] => [{safda}adsfsf}}]
        )

)
于 2012-07-04T13:59:01.757 に答える