正規表現のAND

  • (?=条件1)(?=条件2)を使えれば使え. perljavaは使えるらしい.
  • (?= )は対象文字列を次にシフトせず検査だけして, 一致しても保存しないものらしい.
  • 否定の(?!条件)も同じ.
  • /foo(?!bar)/はfooで始まる文字列のうちfoobarではないものがマッチするが, /(?!foo)bar/はfooに続かないbarではないらしい.
    • foobarは最初の(?!foo)でマッチせず. foobarを1文字シフトする.
    • oobarは最初の(?!foo)はoobなので通過する. (?! )はoobarを1文字シフトしないのでそのまま頭のoの検査に入るが, oとbが一致しない. oobarを1文字シフトする.
    • obarは最初の(?!foo)は通過するが, 同じくoとbが一致しない. obarを1文字シフトする.
    • barは最初の(?!foo)を通過し, そのままbの検査に入る. b,a,rが一致するので, 結局foobarは/(?!foo)bar/にマッチしている.
  • /(!
    • foobarは頭の(!
    • oobarのoobは(?
    • obar, obaは通過, rとbが一致しない.
    • bar, (!