“ある文字列でない文字列”の表現の方法なんですが、正規表現ではこの表現が非常にやりづらいみたいで、私のように躓いている人もいると思うのでメモします。
どういうときにこういう正規表現を書くのかというと、私はHTMLのタグ認識をさせていました。
たとえば、以下はXMLですが、
<Root>
<Element>
なまむぎなまごめなまたまご
</Element>
</Root>
このXMLから、Elementの要素、なまむぎなまごめなまたまごを抜き出すための正規表現みたいなのを書こうとしたわけです。
まず、文字列"<Element>"の直後のアンカーを表す"(?<=<Element>)"を書きます。
アンカーも、実は今までよくわかっていなかったので、これも後でメモします。
そして、Elementの要素はなんでもいいので".*"とします。
そして、".*"だけだと"</Root>"までマッチしてしまうので、"</Element">の直前が最後なのだということを表すため、そのアンカーを表す"(?=</Element>"を書きます。
というわけでパターン文字列は"(?<=<Element>).*(?=</Element>)"となります。
ちなみに、".*"の解釈は行末で終わってしまうというのがデフォルトなので、解析対象に改行があった場合は行の概念を無視するように設定しておきます。