1

正規表現を使用してこの文字列を抽出する方法

||03/15/2012||10:17:11|FOR TEST

「2012/03/15」を抽出したい。このコマンドを試しました

my $firstLine =~ m/^\|\|\d{2}\/\d{2}\/\d{4}\|\|/i ;
trace("first line extraction : $firstLine first $1");

うまくいきません。助けていただけますか?

ありがとう

4

4 に答える 4

4

()抽出する部分の周りにキャプチャ グループを使用する必要があります。

my $line = '||03/15/2012||10:17:11|FOR TEST';
if ($line =~ m/^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/i) {
  # Capturing group ┴───────────────────┘
  print("Group 1: $1\n"); # 03/15/2012
}
于 2012-04-18T19:46:41.767 に答える
1

次のように、キャプチャ グループの値を直接割り当てることができます。

my $in = "||03/15/2012||10:17:11|FOR TEST";
(my $Date) = $in =~ /^\|\|(\d{2}\/\d{2}\/\d{4})\|\|/;

キャプチャ グループ 1 の結果は にあり$Dateます。

ところで。modifier は必要ありませんi。正規表現に文字がないため、大文字と小文字が区別されないため、このオプションは役に立ちません。

于 2012-04-18T20:36:20.953 に答える
0

スクリプト

my $firstLine = '||03/15/2012||10:17:11|FOR TEST';
print $1 if $firstLine =~ /(\d{2}\/\d{2}\/\d{4})/;

出力:

03/15/2012

ここでこのコードをテストします:http://ideone.com/99iUg

于 2012-04-18T19:53:43.637 に答える
0

試す:my $firstLine =~m/^\|\|(.+)\|\|.*$/i

最初の 2 組の二重パイプの間に何があるかだけを本当に気にします。

于 2012-04-18T19:50:14.330 に答える