如何在 Perl 中用正斜杠替换反斜杠?

发布于 12-13 18:32 字数 468 浏览 1 评论 0原文

类似于这个,我该如何实现Perl 也一样吗?

我想转换:

C:\Dir1\SubDir1\` to `C:/Dir1/SubDir1/

我正在尝试遵循 此处 给出的示例,但是当我说类似的话:

my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\

我收到编译错误。我尝试转义 /,但随后出现其他编译器错误。

Similar to this, how do I achieve the same in Perl?

I want to convert:

C:\Dir1\SubDir1\` to `C:/Dir1/SubDir1/

I am trying to follow examples given here, but when I say something like:

my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\

I get a compilation error. I've tried escaping the /, but I then get other compiler errors.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

月棠2024-12-20 18:32:51

= ~=~ 有很大不同。第一个是赋值和按位求反,第二个是与正则表达式一起使用的绑定运算符。

您想要的是这样的:

$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;

请注意使用全局 /g 选项来对整个字符串进行更改。在您的情况下,看起来您需要:

$dir =~ s/\\/\//g;

如果您想要一个更具可读性的正则表达式,您可以交换分隔符: s#\\#/#g;

如果您想保留原始字符串,您可以在进行替换之前复制它。您还可以使用音译:tr#\\#/#——在这种情况下,您不需要全局选项。

简而言之:

$dir =~ tr#\\#/#;

文档:

= ~ is very different from =~. The first is assignment and bitwise negation, the second is the binding operator used with regexes.

What you want is this:

$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;

Note the use of the global /g option to make changes throughout your string. In your case, looks like you need:

$dir =~ s/\\/\//g;

If you want a more readable regex, you can exchange the delimiter: s#\\#/#g;

If you want to preserve your original string, you can copy it before doing the replacement. You can also use transliteration: tr#\\#/# -- in which case you need no global option.

In short:

$dir =~ tr#\\#/#;

Documentation:

孤凫2024-12-20 18:32:51

您正在拆分 =~ 运算符并缺少全局修饰符。只需将 $dir 分配给 $replacedString 然后进行替换。

my $replacedString = $dir;
$replacedString =~ s|\\|/|g;

您可以使用翻译运算符 tr 来代替 s< /code> 运算符也可以得到更简单的代码。

my $replacedString = $dir;
$replacedString =~ tr|\\|/|;

You're splitting the =~ operator and missing the global modifier. Just assign $dir to $replacedString and then do the substitution.

my $replacedString = $dir;
$replacedString =~ s|\\|/|g;

You can use tr, the translate operator, instead of the s operator too to get simpler code.

my $replacedString = $dir;
$replacedString =~ tr|\\|/|;
美人骨2024-12-20 18:32:51

您实际上可能正在寻找 File::Spec->canonpathPath::Class 却没有意识到。

You might actually be looking for File::Spec->canonpath or Path::Class without realizing it.

眉目亦如画i2024-12-20 18:32:51
use warnings;    
use strict;    
my $str = 'c:/windows/';    
$str =~ tr{/}{\\};    
print $str;

输出:

c:\windows\

use warnings;    
use strict;    
my $str = 'c:/windows/';    
$str =~ tr{/}{\\};    
print $str;

Output:

c:\windows\

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文