3

正規表現を使用して [[[ と ]]] の間で何かを一致させる必要があります。次に、括弧内にあるすべての値を配列に入れる必要があります。

テキスト例:

here is some 'test text [[[media-2 large right]]], [[[image-0 large left]]] the another token [[[image-1]]

上記のテキストから、最初の 2 つを一致させる必要があります。

1, [[[media-2 large right]]]
2, [[[image-0 large left]]]

ただし、最後に [ が 2 つしかないため、最後ではありません。

4

5 に答える 5

2

これは以下をチェックします。

  1. [[[
  2. に続く:
    1. -または-以外のもの]
    2. ]続いていない1 ~ 2]
  3. に続く]]]
preg_match_all('/\[\[\[(?:(?:[^\]]*|]{1,2}(?!]))*)]]]/', $string, $matches);
print_r($matches[0]);

この正規表現には]、三重括弧ラッパーの内部で一致するという利点があります (例: [[[foo]bar]]].

注: ]文字クラス内を除いて、エスケープする必要はありません。

于 2012-09-10T13:57:30.413 に答える
1

より安全な解決策:

\[{3}[^\]]+?\]{3}
于 2012-09-10T13:46:46.180 に答える
0

文字列が常に, subject,の形式に従う場合は、次のように使用できます。sizeposition

$string = "here is some 'test text [[[media-2 right]]], [[[image-0]]] the another [[[image-1 left large]]] and token [[[image-1]]";

preg_match_all('/[\[]{3}(.*?)(.*?)?(.*?)?[\]]{3}/', $string, $matches);
print_r($matches);
于 2012-09-10T13:48:22.370 に答える
0

私はこれがうまくいくと思います:

\[\[\[(.*)\]\]\]

しかし、それはおそらくそれを行う新しい方法です:)

于 2012-09-10T13:44:26.197 に答える