0

正規表現を使用して行からすべての文字を取得したい。

$str = "html code <script> var='a,b,c,d,e,f,g,h' </sript> html code";
preg_match_all ('#var =.((\w),?)+.#',$str,$m);
echo "<pre>";
print_r ($ m);
echo "</ pre>";

結果:

Array
(
     [0] => Array
         (
             [0] => var = 'a, b, c, d, e, f, g, h'
         )

     [1] => Array
         (
             [0] => h
         )

     [2] => Array
         (
             [0] => h
         )

)

h - 最後の検索記号、なぜ?

4

2 に答える 2

0

グループの後にグループを複数回再利用するためです+hこのようにして、最後に 1 回一致し、式が完了するまで、グループは毎回一致します。

すべての試合を 1 つのグループにまとめたい場合は、後で完全な試合を分割するか、すべてのグループを独自に作成する必要があります。

于 2012-08-09T09:56:13.563 に答える
0

あなたは、正規表現に完全に適していないことをしようとしていると思います。正規表現は、仕事に最適なツールである場合もありますが、特定の方法で記述できるパターンの一致に限定されています。それらには制御ロジックがないため、ループや再帰はできません。正規表現を他の方法と一緒に使用して、目的を達成することをお勧めします。

この場合、正規表現 (preg_match - not preg_match_all) を使用して一致var='...'させることで、文字列を抽出し...てカンマで分割し、各項目を配列に分割できます。

正規表現を曲げて 1 回の操作ですべてを実行しようとすると、効率が大幅に低下し、信頼性も低くなります (この種の状況では堅実な正規表現を作成するのは難しいため)。

于 2012-08-09T10:08:49.160 に答える