用于匹配python或perl中的平衡括号的正则表达式

时间:2017-12-09 09:57:26

标签: python regex perl pattern-matching

验证特定模式

Valid Patterns:
    ()[]
    {()[]}
    [{}(){()}]

    Invalid Patterns:
    [{]}
    ({}[)]

我正在尝试为此制作正则表达式,任何人都可以用Perl或python或任何语言帮助我吗?

如果使用regexp无法做到这一点,那么您可以创建匹配此模式的代码....

例如。 str ='()[]'或str ='{()[]}'或str ='[{}(){()}]'或str ='{()} []'或任何其他字符串包含上面的OK模式应该匹配,意味着如果我在匹配函数中传递这个字符串,它应该给出TRUE结果.....

和如果字符串包含无序符号模式 str ='[{]}'或str ='({} []]'或str ='(} {)]}'或任何无序符号字符串不匹配,表示我是否在检查匹配函数中传递此字符串,它应该给出错误的结果.....

2 个答案:

答案 0 :(得分:1)

这是一个非正则表达式解决方案:

use strict;
use warnings;
use 5.010;
my %close = qw/ { } [ ] ( ) /;
my @stack;
my ($string) = @ARGV;
say "Checking '$string'";

for (split '', $string) {
    if (my $close = $close{ $_ }) {
        push @stack, $close;
        next;
    }
    unless (@stack) {
        die "unbalanced (stack: @stack)";
    }
    if ($stack[-1] eq $_) {
        pop @stack;
        next;
    }
    die "unbalanced (stack: @stack)";
}

if (@stack) {
    die "unbalanced (stack: @stack)";
}
say "ok";

答案 1 :(得分:0)

问题不明确。它只询问一个匹配的模式,例如{()[]}和另外两个人。 目前尚不清楚正则表达式是否应与文字文本{()[]}或其他内容相匹配。 对于文字匹配,需要引用{()[]}中的特殊字符:

my $regex = join('|', map( quotemeta, '()[]', '{()[]}', '[{}(){()}]' ));
if ('The quick brown {()[]} ...' =~ /$regex/) {
    print "match\n";
} else {
    print "no match\n";
}

<强>输出

match