正規表現(肯定先読み、否定先読み、肯定戻り読み、否定戻り読み)

自分のためにメモ。

(肯定|否定)(先読み|戻り読み)、覚えづらい。

正規表現 パターン(boost::regex 説明
肯定先読み (?=regex) regex に一致する文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することはできない。

たとえば "Windows (?=95|98|NT|2000)" は、"Windows 2000" の "Windows" には一致するが、"Windows 3.1" の "Windows" には一致しない。

先読み処理では、読み進まれた文字は処理済みとは見なされない。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始される。
否定先読み (?!regex) regex に一致しない文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することはできない。

たとえば "Windows (?!95|98|NT|2000)" は、"Windows 3.1" の "Windows" には一致するが、"Windows 2000" の "Windows" には一致しない。

先読み処理では、読み進まれた文字は処理済みとは見なされない。一致の検出後、次の検索処理は先読みされた文字列の後からではなく、一致文字列のすぐ後から開始される。
肯定戻り読み (?<=regex) regex に一致する文字列が終わる位置と検索文字列が終わる位置が一致する。

たとえば "(?<=Ubuntu|Debian GNU) Linux" は、"Ubuntu Linux" の "Linux" には一致するが、"Vine Linux" の "Linux" には一致しない。
否定戻り読み (?<!regex) regex に一致しない文字列が始まる位置にある検索文字列と一致する。一致した文字列は記憶されず、後で使用することはできない。

たとえば "(?<!Ubuntu|Debian GNU) Linux" は、"Vine Linux" の "Linux" には一致するが、"Ubuntu Linux" の "Linux" には一致しない。

正規表現の構文より参考)