この質問を正しく理解しているかどうか見てみましょう。最後の閉じ括弧 ( )
) に続くすべてのものと一致させたいとします***
。
あなたが探している表現は、これだと思います:
preg_match('/(?<=\))[^)]+(?=\*{3})/m',$text, $matches);
サンプル文字列に適用すると、次のように返されます。
array (
0 => '
SELECT
SELECT
SELECT
',
)
使い方:
(?<=\))
: 肯定的な後読み。式の残りの部分は、前に があった場合にのみ一致します。)
[^)]+
: すべてに一致しますが)
、これは、後読みが最後の終了を参照していることを確認するためです。一致しない文字)
に含める必要はありません。*
デリミタが 3 つのアスタリスク文字の場合でも、念のため、このパターンを非貪欲にすることができます: [^\)]+?
. *
終了区切り文字が 1 つのアスタリスクである可能性がある場合は、このクラスにを含める必要があります( [)*]+
)。
(?=\*{3})
: 前向きな先読み。前の ( [\)]+
) は、その後に が続く場合にのみ一致できます。一致させたいセクションを区切るのに***
単一で十分な場合は、正規表現を に変更してください。*
/(?=\))[^)]+(?=\*)/
m
:複数行の修飾子。例は複数行の文字列であるため、役立つ可能性があります
ルックアラウンド アサーションの一致はゼロ幅であり、一致の一部にはなりません。ジョブ完了。
主な「トリック」は、ルックアラウンドで使用する必要がある文字が正規表現の特別な文字で\*
あり、エスケープする必要があることです\)
。*
)