验证特定模式
Valid Patterns:
()[]
{()[]}
[{}(){()}]
Invalid Patterns:
[{]}
({}[)]
我正在尝试为此制作正则表达式,任何人都可以用Perl或python或任何语言帮助我吗?
如果使用regexp无法做到这一点,那么您可以创建匹配此模式的代码....
例如。 str ='()[]'或str ='{()[]}'或str ='[{}(){()}]'或str ='{()} []'或任何其他字符串包含上面的OK模式应该匹配,意味着如果我在匹配函数中传递这个字符串,它应该给出TRUE结果.....
和如果字符串包含无序符号模式 str ='[{]}'或str ='({} []]'或str ='(} {)]}'或任何无序符号字符串不匹配,表示我是否在检查匹配函数中传递此字符串,它应该给出错误的结果.....
答案 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