1

正規表現を使用してスペースのグループを検索し、それらを$などの別の文字に置き換えようとしています。

 $teststring="00005e-000003 D21    3       0004ea-287342 D21    3       000883-d94982 D21    3       000f20-4c5241 D21    3       002561-e32140 D21    3       003018-a1a24f D21    3       00e039-0fe0fe D21    3       08000f-1eb958 D21    3       08000f-1ec4de D21    3       082e5f-498900 D21    3";
 $pattern='/([0-9A-F]{6})-([0-9A-F]{6}) ([0-9A-F]+)\s{1,}([0-9]{1,})/i'; 

 if (preg_match_all($pattern,$teststring,$matches, PREG_PATTERN_ORDER)) {   
        $data = $matches[0];
 }

これは私のパターンに基づいて機能しています。$dataでprint_rを実行すると、次のようになります。

 Array ( 
          [0] => 00005e-000003 D21 3 
          [1] => 0004ea-287342 D21 3 
          [2] => 000883-d94982 D21 3 

       }

私がやりたいのは、すべてのスペースを$に置き換えて、出力が次のようになるようにすることです。

 Array ( 
          [0] => 00005e-000003$D21$3 
          [1] => 0004ea-287342$D21$3 
          [2] => 000883-d94982$D21$3 
  }

どうすればこれを達成できるか教えていただけますか?

ありがとう。

4

3 に答える 3

1

代わりにpreg_replaceを使用してみてください

于 2012-09-19T01:02:30.257 に答える
1

使用する:

$ret = preg_replace('/([\da-f]{6}-[\da-f]{6}) ([\da-f]+)\s+(\d+)/i', '\1$\2$\3', $teststring);
于 2012-09-19T02:54:21.687 に答える
1

スペースのすべてのグループを1つのドル記号に置き換えるだけの場合は、次のようにすることができます。

preg_replace('/\s+/','$', $subject);

余談ですが:

  • \d代わりに[0-9]1桁の数字を一致させるために使用できます
  • +代わりに1つ以上の文字を一致させるために使用できます{1,}
  • //i大文字と小文字を区別しない検索を行うために使用する代わりに、16進文字クラスを作成する[0-9a-fA-F]方がもう少し効率的だと思います...私は脚の作業をしませんでしたが。
于 2012-09-19T03:00:20.847 に答える