<?php
function get_between($startString, $endString, $myFile){
//Escape start and end strings.
$startStringSafe = preg_quote($startString, '/');
$endStringSafe = preg_quote($endString, '/');
//non-greedy match any character between start and end strings.
//s modifier should make it also match newlines.
preg_match_all("/$startStringSafe(.*?)$endStringSafe/s", $myFile, $matches);
return $matches;
}
$myFile = 'fkdhkvdf(mat(((ch1)vdsf b(match2) dhdughfdgs (match3)';
$list = get_between("(", ")", $myFile);
foreach($list[1] as $list){
echo $list."\n";
}
私はこれをしました、そしてそれはうまくいくようです。(明らかに、$ myFile割り当て行をfile_get_contentsステートメントに置き換える必要があります。)いくつかのこと:
A:変数の置換は一重引用符では発生しません。したがって、preg_replace_all正規表現は結果として機能しません。文字列の代わりに$startStringを式に追加するため(。(一致した文字列の最後にある}のチェックも削除しました。必要に応じて\\}
、終了区切り文字の直前に追加し直してください。)
B:$listは配列の配列になります。デフォルトでは、インデックスゼロにはすべての完全一致が含まれると思います。インデックス1には、最初のサブパターンの一致が含まれます。
C:これは、一致させようとしているサブパターン内に$endStringが見つからない場合にのみ機能します。たとえば、(matc(fF))がmatc(fF)を提供することを期待している場合は、そうではありません。これにより、match(fF。この場合に前者の結果を取得する場合は、より強力なパーサーが必要になります。
編集:ここでのget_between関数は、および、またはその他の必要なもの (
と連携して機能するはずです。)}