2016-12-10 22 views
0

Perlスクリプトにサブルーチンがあります。このスクリプトに渡された文字列に、内側のペア「abba」、「baab」、「baab」の外側のペアのパターンに一致する4文字が含まれていれば、true、 「acca」などが含まれます。 'aaaa'と一致してはいけません。私は正規表現が動作していない理由を理解していない。私は、次のものが 'found'を出力するはずだと思っていますが、そうではありません。Perlの一致abbaパターン

print 'found' if 'abba' =~ /(.)q(?!\g1)(.)\g2\g1/; 

私の正規表現で何が問題になっていますか?

+0

あなたが知っている、あなたは本当にSOの正規表現のゴルフの答えを探すべきではありません。それはちょっと騙されます:P –

+0

@SebastianLenartowicz正規表現のゴルフではありませんが、それはおそらく私が調べてはいけない答えです:)。 Advent of Codeのgoogleの結果を参照してください。 – FlashDrive

+1

このようなパターンを書くこともできます: '(。)\ 1 * +(。)\ 2 \ 1' –

答えて

5

あなたのパターンに浮遊qがあります。

$ perl -le'print "found" if "abba" =~ /(.)(?!\g1)(.)\g2\g1/;' 
found 
関連する問題