2012-02-08 19 views
8

該訂單的Perl真的做什麼?

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

我能想到的唯一的事情就是$1$&可能被再次使用,但它是緊跟。

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

這兩條線合在一起,第一行是無意義的,可移動的嗎?看起來好像是這樣,但我在這個舊程序中多次看到它,並且想要確認。

回答

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

沒,不習慣,但很有趣!我從來不知道這件事。 – 2012-02-08 16:03:58

+0

+1這是一個可能的用途。很好的接收。 – TLP 2012-02-08 16:18:03

相關問題