0

私は preg_replace を実行しようとしています。これにより、別のプログラムから出力されたテキストを書式設定できるようになりました。

ここにスニペットがあります....

zzz:xxx1 _:somewhereElse_1 ;
xxx:yyy "dddd" ;
zzz:xxx2 _:somewhereElse_2 ;
yyy:zzz "ffff" ;   

_:somewhereElse_1
    I am somewhere else ;
 _:somewhereElse_2
    whatsup ;

私がやろうとしているのは、それをこのように見せることです...

zzz:xxx1 I am somewhere else ;
xxx:yyy "dddd" ;
zzz:xxx2 whatsup ;
yyy:zzz "ffff" ;   

色々な段階でやってみましたが…

ステージ 1. 先頭ビットから _:identifier を抽出します...

preg_match_all("/.*:.*_:somewhereElse_[(0-9)]+/", $data, $matches);

それは機能しますが、私ができないことは、対応する値を下位ビットから抽出することです...私のダムの正規表現はどれも機能しません。

私がすべてのwhereElse_nを抽出したことを覚えているなら、私が得ることができる最も近いものは

preg_match_all("/(\n$somewhereElse_n\n.*;)?/s", $data, $matches);

問題は、空の場所 (ほぼ 2000) の負荷としての一致配列と、最初の ..

      [1149] => 
      [1150] => 
      [1151] => 
      [1152] => 
         _:somewhereElse_1
            I am somewhere else ;
            So am i;
         _:somewhereElse_2
            whatsup ;
      [1153] => 
      [1154] => 

どんな助けもありがたく受け入れられます:D

4

1 に答える 1

3

あなたの.*(どんな量でも)は「貪欲」であり、有効でありながら可能な限り一致しようとします。そのため、最初の試合から最後の試合までずっと一致しています。

これを に変更すると.*?、非貪欲になり、有効なままで可能な限り一致しなくなります。そのため、すべてを 1 つにまとめるのではなく、個々の出現を個別の一致として一致させる必要があります。

于 2012-10-11T15:52:04.443 に答える