ab以外の文字が存在しなくて、かつ、 aが偶数個で、bが奇数個の行を検索する 検索前 検索後
a aa aaa b bb aab aabb abaaa ababaa
^(b|a(aa|bb)*(ab|ba))(aa|bb|(ab|ba)(aa|bb)*(ab|ba))*$ 別解 ^(?=[^a]*$|([^a]*a[^a]*a[^a]*)*$)(?![^b]*$|([^b]*b[^b]*b[^b]*)*$)[ab]*$ 別解 ^(?=(([^a]*a){2})*[^a]*$)(?!(([^b]*b){2})*[^b]*$)[ab]*$
Perl正規表現雑技からの転載です 別解では、 偶数は2の倍数なので、2の倍数か調べてます また、 bの個数は、偶数か奇数なので 補集合の概念を使って、 bが奇数個である ⇔ bが偶数個でない といった同値変形を行い、否定先読みを使ってます