Regex Perl regrex:从匹配中排除模式

Regex Perl regrex:从匹配中排除模式,regex,perl,Regex,Perl,我有/home/user/abc/def/mng,我想替换/home/user,或者我之前做了一个检查,如果字符串包含$home,那么就从匹配中排除$home或/home/user,并在模式/abc/def/mng上处理某些内容 如何使用Exlude?如果我已经很好地理解了你的问题,你需要这样的东西: my $newstring = $oldstring =~ s/(\/home\/user)|(\$HOME)//gr; 看看这里:这并不特别聪明,但我认为它符合您的要求: use stric

我有
/home/user/abc/def/mng
,我想替换
/home/user
,或者我之前做了一个检查,如果字符串包含$home,那么就从匹配中排除$home或
/home/user
,并在模式
/abc/def/mng
上处理某些内容


如何使用Exlude?

如果我已经很好地理解了你的问题,你需要这样的东西:

my $newstring = $oldstring =~ s/(\/home\/user)|(\$HOME)//gr; 

看看这里:

这并不特别聪明,但我认为它符合您的要求:

use strict;
use warnings;
use Data::Dumper;

my $variable = '/home/jtym/abc/def/mng';
my $home_if_exists;

if($variable =~ /^$ENV{HOME}/) {
    $variable =~ s/^$ENV{HOME}//;
    $home_if_exists = $ENV{HOME};
}

$variable =~ s/\//SLASH/g;
$variable = $home_if_exists.$variable;

print Dumper($variable);

$VAR1='/home/jtymlashabcslashdefslashmng'

它必须是正则表达式吗?因为我会建议
File::Spec
,只做逻辑测试。