簡體   English   中英

Perl替換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM