2012-07-13 64 views
3

Perl和正則表達式的新手沒有說,我試圖在perl正則表達式中使用數組中的元素。這裏是摘錄在Perl中使用數組元素進行模式匹配

my $temp = $line =~ s/somestring[^\n]*$_// for @myarray; 

如果我硬編碼字符串而不是$ _它工作正常。另外$ _單獨打印字符串很好。那麼我做錯了什麼?即使使用for循環的擴展版本也不會產生匹配。

P.S只是爲了澄清數組只有一個元素,我知道它匹配線。

+0

我不是Perl開發者,但是在REGEX中'$'有特殊含義 - 它錨定在字符串末尾,因此可能需要轉義。 – Utkanos 2012-07-13 17:33:47

+0

@utkanos:沒必要。標量變量插值在Perl正則表達式中工作得很好。 perldoc perlop在「引用和引用運營商」一節下。 – DavidO 2012-07-13 17:45:40

+0

這就是爲什麼我發佈評論,而不是答案。我只是說,在一般的REGEX語法中,'$'具有特殊的含義。我不是Perl開發人員,所以我沒有提交 - 我只是在提出這個想法。 – Utkanos 2012-07-13 17:50:56

回答

4

它應該添加圓括號,儘管我希望數組的內容沒有特殊字符,因爲您需要使用quotemeta函數來轉義它們。

my $temp; 
($temp = $line) =~ s/somestring[^\n]*$_// for @myarray; 
+2

「特殊字符」問題是一個好點。 's/somestring [^ \ n] * \ Q $ _ \ E //'是更強大的解決方案,除非OP真的希望將'$ _'的內容視爲模式。 – DavidO 2012-07-13 17:47:07

+0

謝謝!它有幫助。穩健的解決方案始終是可取的。幫助我更好地開始學習Perl。 – ash 2012-07-13 18:20:12