2012-02-08 16 views
8

このPerlの行は本当に何かをしますか?このPerlの行は意味がありませんか?

$variable =~ s/^(\d+)\b/$1/sg; 

私は考えることができる唯一のことは、$1または$&が再使用されるかもしれないということですが、それはすぐに続いています。

$variable =~ s/\D//sg; 

この2つのラインを合わせると、最初のラインは無意味で取り外し可能ですか?それはそうであるようですが、私はこの古いプログラムで何度も見てきたし、確かめたいと思っていました。

答えて

12
$variable =~ s/^(\d+)\b/$1/sg; 
  • 先頭にアンカー^/g修飾子は無用になります。
  • 文字列にワイルドカード文字.がないと、/s修飾子は役に立たなくなります。これは、.も改行にマッチさせるためです。
  • \b^はゼロ幅アサーションであり、キャプチャグループ外の唯一のものであるため、この置換は変数をまったく変更しません。この正規表現はありません

唯一のことは、彼らが発見された場合、$1に数字をキャプチャです。

、その後の正規表現

$variable =~ s/\D//sg; 

変数に一つだけの長い番号を作り、すべての非数字を削除します。もし最初の部分(最初の正規表現にマッチしたもの)を分離したいのであれば、最初の正規表現から$1にアクセスすればよいでしょう。

$variable =~ /^(\d+)\b/; 

を、キャプチャを使用することを想定している場合:

ただし、その場合の最初の正規表現は、より良いだけで書き込まれる「汚染モードが」使用中

my ($num) = $variable =~ /^(\d+)\b/; 
6

ですか? (スクリプトは-Tオプションを指定して呼び出されます)

ユーザの入力をサニタイズする(つまり定義しない)ことがあります。

+0

いいえ、使用されていませんが、非常に興味深い!私はこれについて知らなかった。 –

+0

+1それはそのための1つの可能性があります。ナイスキャッチ。 – TLP

関連する問題