Regex Perl正则表达式:匹配除某个子文件夹模式之外的所有文件夹

Regex Perl正则表达式:匹配除某个子文件夹模式之外的所有文件夹,regex,perl,Regex,Perl,给定以下文件夹名称: locales/DE/en locales/FR/en locales/US/en locales/US/fr public test [...] 我想匹配除前两种模式以外的所有模式。根目录中还有其他文件夹,而locales文件夹中也有其他子文件夹。我真的想排除locales/*中的所有内容,除了locales/US 这适用于地区,但无法包括其他根文件夹。 /(地区)\/(美国)/ 有什么想法吗?要匹配除地区/US以外的任何内容,您可以使用负前瞻: /^(?!lo

给定以下文件夹名称:

locales/DE/en    
locales/FR/en
locales/US/en
locales/US/fr
public
test
[...]
我想匹配除前两种模式以外的所有模式。根目录中还有其他文件夹,而
locales
文件夹中也有其他子文件夹。我真的想排除
locales/*
中的所有内容,除了
locales/US

这适用于
地区
,但无法包括其他根文件夹。
/(地区)\/(美国)/


有什么想法吗?

要匹配除
地区/US
以外的任何内容,您可以使用负前瞻:

/^(?!locales\/US).*/m

要匹配除
地区/US
之外的任何内容,您可以使用负前瞻:

/^(?!locales\/US).*/m

您可以使用两个正则表达式,而不是将其混乱在一个正则表达式中。以下是一个尝试:

my @folders =
  qw (locales/DE/en locales/FR/en locales/US/en locales/US/fr public test);

foreach (@folders) {
    if (/^locales/) {
        next if ( $_ !~ /^locales\/US/ ); # skip everything except locales/US
    }
    print $_,"\n";
}

您可以使用两个正则表达式,而不是将其混乱在一个正则表达式中。以下是一个尝试:

my @folders =
  qw (locales/DE/en locales/FR/en locales/US/en locales/US/fr public test);

foreach (@folders) {
    if (/^locales/) {
        next if ( $_ !~ /^locales\/US/ ); # skip everything except locales/US
    }
    print $_,"\n";
}

如果您允许所有内容,请使用
^.*$
并在开始时使用禁止
区域设置/(?:DE | FR)
的先行限制:。如果您允许所有内容,请使用
^.*$
并使用禁止
区域设置/(?:DE | FR)的先行限制
开头:。我相信他想跳过区域设置中的每个文件,即
locales/*
除了
locale/US
。基于这一行,这对区域设置有效,但没有包括其他根文件夹。我认为OP想排除
locales/US
只有他的正则表达式对
locales
有效,所以他说的是公众,
test
和其他根文件夹一样。我相信他想跳过locale中的每个文件,即
locales/*
除了
locale/US
。基于这行问题
这对locale有效,但不包括其他根文件夹。
我认为OP想排除
locales/US
只有他的正则表达式对
locales
,因此他将
public
test
作为其他根文件夹来讨论。这很好,但正则表达式的要点是删除冗长。您希望定义一个规则并在一行中应用它。这很好,但正则表达式的要点是消除冗长。您希望定义一条规则并在一行中应用它。