Hatena::ブログ(Diary)

satosystemsの日記 このページをアンテナに追加 RSSフィード

2010-05-19

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

自分のためにメモ。

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

正規表現パターン(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" には一致しない。

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

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。

Connection: close