-1

だからここに私のサンプルがあります

while (<FH>) {

  my $line = $_;
  chomp($line);

  my $marksearchpat= "href=\"\@X\@EmbeddedFile\.requestUrlStub\@X\@bbcswebdav\/xid";      
  my $markreplacepat= "href=\"http:\/\/www\.facepalm\.org\/bbcswebdav\/xid";    
  ## (Mark)  Duplicate input file lines to "altered" file, making substitutions as necessary.
  $linenumber++;    
    print "Line $linenumber Has Been Read\n";
  my $line2=$_;    
  $line2=~s/$marksearchpat/$markreplacepat/eig;  
  print WHOUT $line2;     
  print WHLOG 'At '.localtime().', I replaced '. $marksearchpat .' with '. $markreplacepat .' at line '.$linenumber.' of file '.$file."\n"; 

正規表現変数 (正規表現一致変数) を $marksearchpat と $markreplacepat に追加するにはどうすればよいですか?

4

1 に答える 1

1

あなたは何もできません

s/$search_pat/$replace/

補間は補間された値をまったく解釈しないためです。それがあなたが追加した理由です/e

s/$search_pat/$replace_code/e

上記では、 の値が$replace_codePerl コードに期待されます。の最後の式が$replace_code評価されるものは、置換文字列になります。では、どの Perl コードでそれを行うのでしょうか? 次のいずれかが行われます。

'http://www.facepalm.org/bbcswebdav/xid-' . $1

"http://www.facepalm.org/bbcswebdav/xid-$1"

に配置するに$replace_codeは、次のいずれかを使用できます。

my $replace_code = '"http://www.facepalm.org/bbcswebdav/xid-$1"';
my $replace_code = q{"http://www.facepalm.org/bbcswebdav/xid-$1"};
my $replace_code = q{'http://www.facepalm.org/bbcswebdav/xid-' . $1};
etc

したがって、最終的には次のようになります。

my $search_re = qr{href="\K\@X\@EmbeddedFile\.requestUrlStub\@X\@bbcswebdav/xid-([0-9]{9}_2)};
my $replace_code = q{"http://www.facepalm.org/bbcswebdav/xid-$1"};
s/$search_re/$replace_code/gie;

技術的には、先読みを使用して何かをキャプチャする必要はありません。

my $search_re = qr{href="\K\@X\@EmbeddedFile\.requestUrlStub\@X\@bbcswebdav/xid-(?=[0-9]{9}_2)};
my $replace_code = q{"http://www.facepalm.org/bbcswebdav/xid-"};
s/$search_re/$replace_code/gie;

これは、次の必要がないことも意味します/e

my $search_re = qr{href="\K\@X\@EmbeddedFile\.requestUrlStub\@X\@bbcswebdav/xid-(?=[0-9]{9}_2)};
my $replace_str = 'http://www.facepalm.org/bbcswebdav/xid-'
s/$search_re/$replace_str/gi;
于 2012-06-11T23:09:51.307 に答える