我有一系列文件:
my @plistFiles = glob('Logs/*/*.plist');
我需要逃避,它将包含'('和')'以及通常的空格。
以下是@plistFiles将返回的文件路径之一:
Logs/Run 1 (13)/Automation Results.plist
我目前有这个代码用于转义文件路径中的空格,我将其传递给OSX中终端中的命令:
$plistFile =~ s/\ /\\\ /g;
那么如何编辑这个正则表达式以逃避(和)?
这对于转义(和)来说是否正确?:
$plistFile =~ s/\(\d)/\\\(\d\\\)/g;
答案 0 :(得分:1)
我无法理解为什么拨打quotemeta
的电话不够。是的,它也会逃避斜线和点,但这不重要。
然而,只有空格和圆括号也很简单。
此程序显示两种技术
use strict;
use warnings;
use feature 'say';
my $path = 'Logs/Run 1 (13)/Automation Results.plist';
my $escaped = quotemeta $path;
say $escaped;
$escaped = $path =~ s/([\s()])/\\$1/gr;
say $escaped;
<强>输出强>
Logs\/Run\ 1\ \(13\)\/Automation\ Results\.plist
Logs/Run\ 1\ \(13\)/Automation\ Results.plist
答案 1 :(得分:1)
答案 2 :(得分:0)
您会发现使用{}分隔您的正则表达式更容易。保存一些\眼睛摇晃。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use 5.10.0;
use Data::Dumper;
my $to_match = "( this dreadful ) filename";
$to_match =~ s{([\(\)])}{\\$1}g;
say $to_match;
这样做:
$ perl x.pl
\( this dreadful \) filename
如果您需要转义空格以及()s,那么
$to_match =~ s{([\(\s\)])}{\\$1}g;
答案 3 :(得分:-1)
要转换,例如(13)
到\(13\)
,你可以写:
$plistFile =~ s/ /\\ /g;
$plistFile =~ s/\((\d+)\)/\\($1\\)/g;
但我认为你可能最好只是逃避(
和)
的所有实例,无论它们是否包围数字:
$plistFile =~ s/([ ()])/\\$1/g;