0

私は正規表現に非常に慣れていません。次の文字列「109_Admin_RegistrationResponse_20130103.txt」を抽出したい

このファイルの内容から、内容は行ごとに選択されます:
01-10-13 10:44AM 47 107_Admin_RegistrationDetail_20130111.txt
01-10-13 10:40AM 11 107_Admin_RegistrationResponse_20130111.txt

正規表現は 2 行目を選択すべきではなく、最初の行のみが true を返す必要があります。

4

3 に答える 3

3

あなたの正規表現にはさまざまな間違いがあります...

  1. 行は必要なファイル名で始まりませんが、^そこに
  2. +あなたの文字グループに欠落している[a-zA-Z]ため、単一の文字にしか一致できません
  3. は文字グループに含ま_れていないため、一致しませんAdmin_RegistrationResponse
  4. 欠落\しており、d{2}一致ddするだけです。
  5. M42の回答(私は省略しました)に従って、ドットもエスケープする必要があります。.そうしないと、ドットも一致します( before に123_abc_12345678atxt注意してください)atxt

あなたの正規表現は

\d+_[a-zA-Z_]+_\d{4}\d{2}\d{2}\.txt$

次のように簡略化できます

\d+_[a-zA-Z_]+_\d{8}\.txt$

本当に冗長に\d{2}\d{2}見えます-グループのキャプチャを行いたくない場合は、次のようにします。

\d+_[a-zA-Z_]+_(\d{4})(\d{2})(\d{2})\.txt$

于 2013-01-09T12:21:58.983 に答える
1

アンカーを削除し、ドットをエスケープします。

\d+[a-zA-Z_]+\d{8}\.txt
于 2013-01-09T12:24:50.573 に答える
0

私はphpの初心者ですが、phpexplode()で関数を使用するか、言語で同等のものを使用できると思います。

$string = "01-09-13 10:17AM 11 109_Admin_RegistrationResponse_20130103.txt";
$pieces = explode("_", $string);

$stringout = "";
foreach($i = 0;$i<count($pieces);i++){
 $stringout = $stringout.$pieces[$i];
}
于 2013-01-09T12:27:05.390 に答える