2
echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"
輸出爲:
aa
因爲$ 1指的是第一個捕獲組,這恰好是 「a」。
但是上面的代碼輸出:
(a b c)(a b c)
我在做什麼錯?
echo "(a b c)(a b c)" | perl -ne "/(a) b/g; print $1"
輸出爲:
aa
因爲$ 1指的是第一個捕獲組,這恰好是 「a」。
但是上面的代碼輸出:
(a b c)(a b c)
我在做什麼錯?
首先使用情況下的* nix單引號,因爲這不是你想要的東西:
echo "(a b c)(a b c)" | perl -MO=Deparse -ne "/(a) b/g; print $1"
LINE: while (defined($_ = <ARGV>)) {
/(a) b/g;
print $_;
}
,然後使用標量上下文與/g
遍歷所有匹配
echo "(a b c)(a b c)" | perl -ne 'print $1 while /(a) b/g'
,或者使用列表上下文所以正則表達式一次返回所有的匹配,
echo "(a b c)(a b c)" | perl -ne 'print /(a) b/g'
這使得現在很有意義,謝謝! 特別感謝教我的Deparse技巧! (由於聲譽不好,我還不能投票) – vervenumen