Regex 忽略正则表达式匹配中带括号的部分

Regex 忽略正则表达式匹配中带括号的部分,regex,perl,Regex,Perl,现在我有一个正则表达式: /regular(\[[a-z]*\])* expression/i 正确匹配此字符串的: Regular[AECC][XVK] Expression 但未能满足以下条件: R[AECC]egular [XVK]Expression R[ABC]egular Expression Regular[xx] Expressio[]n 如何将上述所有内容与单个正则表达式匹配 / r (?:\[[a-z]*\])? e (?:\[[a-z]*\])? g

现在我有一个正则表达式:

/regular(\[[a-z]*\])* expression/i
正确匹配此字符串的:

Regular[AECC][XVK] Expression
但未能满足以下条件:

R[AECC]egular [XVK]Expression
R[ABC]egular Expression
Regular[xx] Expressio[]n
如何将上述所有内容与单个正则表达式匹配

/
   r (?:\[[a-z]*\])?
   e (?:\[[a-z]*\])?
   g (?:\[[a-z]*\])?
   ...
   i (?:\[[a-z]*\])?
   o (?:\[[a-z]*\])?
   n
/ix


鉴于正则表达式的目的是在“随机”位置查找对象,是的,这是可能的。你可以使用lookarounds来表示“查找随机定位的X,后面(不)跟/前面是Y”。我只需要编写一个正则表达式,从字符串中删除所有的
\[[a-z]*\]*
,然后再编写一个正则表达式来匹配
正则表达式。问“可能吗”的问题并没有多大帮助。答案是“是的”,但这不是让人们为您编写代码的地方。鉴于正则表达式旨在以“随机”位置查找内容,是的,这是可能的。你可以使用lookarounds来表示“查找随机定位的X,后面(不)跟/前面是Y”。我只需要编写一个正则表达式,从字符串中删除所有的
\[[a-z]*\]*
,然后再编写一个正则表达式来匹配
正则表达式。问“可能吗”的问题并没有多大帮助。答案是“是”,但这不是让人们为您编写代码的地方。似乎第一个就可以了,但我会将非捕获组更改为捕获组,因为它只匹配字符串,并且保持不变。谢谢。看起来第一个就可以了,但我会将非捕获组更改为捕获组,因为它只匹配字符串,并且保持不变。非常感谢。
my $pat = join '(?:\\[[a-z]*\\])?', map quotemeta, split //, 'regular expression';
my $re = qr/$pat/i;
/$re/
s/\[[a-z]*\]//ig;
/regular expression/i