'a' が 0 回から 'm' 回連続して発生するか、'b' が 0 回から 'n' 回連続して発生するかのいずれかの選択肢に貪欲に一致させたいと考えています。私が行った場合
/a{,m}|b{,n}/
「b」のシーケンスがある場合、「a {、m}」と一致し、代替の「b {、n}」は見られず、貪欲な一致にならないため、機能しません.
'a' が 0 回から 'm' 回連続して発生するか、'b' が 0 回から 'n' 回連続して発生するかのいずれかの選択肢に貪欲に一致させたいと考えています。私が行った場合
/a{,m}|b{,n}/
「b」のシーケンスがある場合、「a {、m}」と一致し、代替の「b {、n}」は見られず、貪欲な一致にならないため、機能しません.
あなたが正しくやろうとしていることを理解したら、どうですか/(?:a{1,m}|b{1,n})?/
連続する a の文字列 (最大m回) または連続する b の文字列 (最大n回)のいずれかに一致するか、オプションの?
.
デフォルトでは、量指定子は貪欲で、左から右にあると思います。したがって、 non の存在下で代替マッチングで a{0,m} を持っていたのは、実際には貪欲な問題ではありませんa
。それらが最初に存在していれば、'm' a まで一致していたでしょう。
貪欲さは、誰かが推測するよりも複雑に思えます。
'aaaaaaaaaa' =~ /(a{1,2}) (a{1,2}?) (a{1,4}) (a{4,12}+)/x
&&
print "'$1', '$2', '$3', '$4'
";
'aa', 'a', 'aaa', 'aaaa'