回答
Perl允許將任何非空白字符用作字符串分隔符。見Quote and Quote-like Operators
包圍字符都是成對使用的,像<...>
,[...]
,(...)
和{...}
,而單引號防止插值。否則,功能等同於默認的分隔符
。在這種情況下
$filename =~ s[^.+/][]
相同
$filename =~ s/^.+\///
,但更具可讀性
我傾向於選擇管字符|
,看起來與通常的斜線相似
$filename =~ s|^.+/||
但選擇是你
但是在我給出的代碼中有'['和']'字符,所以它不僅僅是'/'字符的替換。還有其他事情正在發生。 – CJ7
@ CJ7請參閱[docs for's ///'](http://perldoc.perl.org/perlop.html#s%2f_PATTERN_%2f_REPLACEMENT_%2fmsixpodualngcer):「任何非空白分隔符都可以代替斜線。 ..如果PATTERN是用括號引號分隔的,則REPLACEMENT有它自己的一對引號,這些引號可以是也可以不是括號引號,例如's(foo)(bar)'或'
@ CJ7你也可以使用[B :: Deparse](https:// metacpan)來證明這一點。org/pod/B :: Deparse):'perl -MO = deparse -e's [foo] [bar]''打印's/foo/bar /;' – ThisSuitIsBlackNot
這只是一個替代模式分隔符。根據模式的細節 - 特別是,如果模式中有斜線 - 如果除了斜線之外的東西用作分隔符,人類可能更容易解析表達式。在這種情況下,它有點邊緣,但是,如果你使用的斜線它是這樣的:
$filename =~ s/^.+\///;
您可以立即看到它難以找出哪些斜槓是圖案的一部分,其界定的格局。在這種情況下,最後的第三個斜槓是該模式的一部分,並被解釋爲結束模式,因此必須逃脫。
- 1. RegEx符號與S?
- 2. Perl的-s在師
- 3. 符號鏈接perl
- 4. Perl:全局符號「%s」需要明確的包名稱
- 5. s ///和Perl中的組合變音符號6
- 6. 「(\ S +)\。」之間的區別和「(\ S +)|」在Perl
- 7. 在Perl中,s/^ \ s + //和s/s + $ //有什麼區別?
- 8. printf(「%s」)返回符號
- 9. C - printf(「%s」)顯示符號
- 10. 讀點符號在Perl
- 11. 什麼是perl符號=〜
- 12. 在JavaScript中,符號/ \ s *; \ s * /是什麼意思?
- 13. perl刪除程度符號
- 14. 如何在Makefile中引用perl $符號
- 15. Perl庫路徑/ s
- 16. perl中的 - >符號和perl風格
- 17. Perl的 「全局符號」
- 18. Perl星號*字符問題
- 19. Perl' - >'奇怪的符號
- 20. perl符號鏈接路徑
- 21. Python的導入錯誤:找不到符號,而符號<s>是</s> *不*存在於文件
- 22. 符號(S)從iOS的範例項目
- 23. LD:符號(S)沒有發現
- 24. _OBJC_CLASS _ $ _ - 符號(S)未找到錯誤
- 25. 符號(s)未找到架構armv6
- 26. Python的空格符號刪除\ S
- 27. 符號(&'S)和不同版本的Windows
- 28. 符號(s)未找到建築i386?
- 29. 格式符 - %s%S
- 30. 如何在Perl中匹配字符串與變音符號?
相關:[?哪些呢Š{SOMESTR} {$ MYVAR}意味着在Perl(http://stackoverflow.com/q/18354691/176646),[在Perl正則表達式中的大括號](http://stackoverflow.com/q/22454089/176646) – ThisSuitIsBlackNot