#!/usr/bin/perl # http://perlmonks.org/?node_id=1196089 use warnings; use strict; $\ = $/; while(){ chomp; my $dict = $_; $_ = ; my( $head, $tail ) = map length( $_ // '' ), split /\*/, $_; print "head:[$head], tail:[$tail]"; s/\?/[$dict]/g; s/\*/[^$dict]*/; my $qr = qr/^$_$/; print "regex:[$qr]"; (print "loop #:[$_]"), $_ = , (print "[$_]"), substr($_, $head, 0, ' '), (print "[$_]"), substr($_, -$tail, 0, ' '), (print "[$_]"), print "Answer: ", $_ =~ $qr ? "YES" : "NO" for 1 .. ; } __DATA__ ab a?*a 2 aacca aaccb #### head:[2], tail:[2] regex:[(?^:^a[ab][^ab]*a $)] loop #:[1] [aacca ] [aa cca ] [aa cc a ] Answer: YES loop #:[2] [aaccb ] [aa ccb ] [aa cc b ] Answer: NO #### __DATA__ ab a?a 2 aaa aab #### head:[4], tail:[] regex:[(?^:^a[ab]a $)] loop #:[1] [aaa ] [aaa ] [ aaa ] Answer: NO loop #:[2] [aab ] [aab ] [ aab ] Answer: NO #### #!/usr/bin/perl # http://perlmonks.org/?node_id=1196089 use warnings; use strict; $\ = $/; while(){ chomp; my $dict = $_; $_ = ; my $star = /\*/; my( $head, $tail ) = map length( $_ // '' ), split /\*/, $_; print "head:[$head], tail:[$tail]"; s/\?/[$dict]/g; s/\*/[^$dict]*/; my $qr = qr/^$_$/; print "regex:[$qr]"; (print "loop #:[$_]"), $_ = , (print "[$_]"), $star && substr($_, $head, 0, ' '), (print "[$_]"), $star && substr($_, -$tail, 0, ' '), (print "[$_]"), print "Answer: ", $_ =~ $qr ? "YES" : "NO" for 1 .. ; } __DATA__ ab a?a 2 aaa aab #### head:[4], tail:[] regex:[(?^:^a[ab]a $)] loop #:[1] [aaa ] [aaa ] [aaa ] Answer: YES loop #:[2] [aab ] [aab ] [aab ] Answer: NO