[英]Perl Substitution
我有一個變量,它存儲Windows上的路徑。 我想用路徑中的/替換所有\\。
例如。 $path = C:\\Users\\scripts.ps1
我是Perl的新手,並試過類似的東西
$path = s/\\////
但它沒有用。 你能幫幫我嗎....
如果您想要一種跨平台的方法,請使用File :: Spec 。
($volume,$directories,$file) = File::Spec->splitpath( $path );
@dirs = File::Spec->splitdir( $directories );
然后使用catpath
將其加入。
你的嘗試幾乎是對的。 讓我們仔細看看:
$path = s/\\////
^
首先,要使替換對$path
變量進行操作,您需要使用=~
binding運算符 ,而不僅僅是普通賦值運算符。 接下來,由於您使用了慣用的斜杠字符作為替換分隔符,上面指示的斜杠實際上標記了替換命令的結束 ,剩下的兩個斜杠只是垃圾。 看起來您可能認為繞過角色的特殊屬性的規則是將其加倍。 如果您的唯一示例是反斜杠,那么該規則可能有意義,但規則實際上是使用反斜杠為特殊字符添加前綴 。 用反斜杠替換突出顯示的斜杠,它變為轉義字符 ,因此我們繞過下一個斜杠的特殊函數將其視為普通斜杠,允許斜杠后正確終止替換:
$path =~ s/\\/\//
但這很難讀。 幸運的是,您不需要使用斜杠作為替換分隔符; 你可以使用你想要的任何角色。 選擇與您要替換的文本不相似的分隔符 ,並且您的代碼可以更具可讀性。 詳細信息在Quote和類似報價的運算符下的perlop中 。 當您選擇的字符與另一個字符形成一對時,您可以使用兩者來包含表達式的兩個部分。 此外,由於你可能想要替換字符串中的所有斜杠,你應該在結尾使用g
修飾符,告訴它全局匹配而不是在第一次替換后停止。 將它們整合在一起:
$path =~ s{\\}{/}g
由於您將單個字符替換為另一個單個字符,因此您可以使用更專業的音譯運算符tr
而不是s
。 它會自動全局應用。
$path =~ tr{\\}{/}
最后,如果這不僅僅是一次性路徑操作(即,您在腳本中多次執行此操作,或者腳本將保持一段時間),或者您需要您的代碼在多個平台上運行相同的操作, 考慮使用File :: Spec模塊 。 它允許您使用正確的分隔符分割和連接路徑組件,以適用於您正在運行的任何平台。
對於某些種類,還可以提到tr
運算符
$path =~ tr!\\!/!;
要么
$path =~ y!\\!/!;
將取代所有實例\\
用/
在$path
$path =~ s/\\\\/\\//g;
最后的g
替換每個出現的\\
而不是僅出現第一個。
如果使用不同的模式分隔符,則無需轉義正斜杠:
$path =~ s!\\!/!g;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.