正規表現の先読みと後読みについて

はじめに
株式会社BTMの藤野です!
正規表現はソースコードの調査やデータの整形などでよく使うのですが、最近後読みについて使う機会があったので、先読みも含めて使い方を調べて纏めてみました。
前提条件
・使用ツール: Visual Studio Code の「Find」機能を使用
・文字コード: 検索対象はUTF-8
正規表現の先読みと後読みの概要
正規表現における先読みと後読みは、指定したパターンがマッチする直前や直後に特定の条件が成立するかを確認できる記法です。肯定と否定があります。
先読み
マッチ位置の直後に条件が続くかを確認します。肯定先読みは(?=pattern)
、否定先読みは(?!pattern)
です。
肯定先読み
マッチ位置の直後に条件が続く場合のみマッチします。
ab(?=c)
例: \d+(?=円)
使用例:指定した単位の数字部分のみをマッチさせる
- パターン
\d+(?=円)
- データ
100ドル
1000円
10000ペソ
数字部分のみマッチ(「円」は含まれない)
否定先読み
マッチ位置の直後に条件が続かない場合のみマッチします。
ab(?!c)
例: \d+(?!.*円)
使用例:指定した単位以外の数字部分のみをマッチさせる
- パターン
\d+(?!.*円)
- データ
100ドル
1000円
10000ペソ
「円」以外の数字部分がマッチ
後読み
マッチ位置の直前に条件が存在するかを確認します。肯定後読みは(?<=pattern)
、否定後読みは(?<!pattern)
です。
肯定後読み
マッチ位置の直前に条件が存在する場合のみマッチします。
(?<=a)bc
使用例:東京都以降の文字列をマッチさせる
- パターン
(?<=東京都)[一-龯]+
- データ
東京都葛飾区
大阪府大阪市北区
東京都渋谷区
「東京都」以降の漢字部分がマッチ
否定後読み
マッチ位置の直前に条件が存在しない場合のみマッチします。
(?<!a)bc
使用例:コメント以外の日本語にマッチさせる
- パターン
(?<!\/\/.*)[あ-んア-ン一-龯]+
- データ
// ひらがな
const a_gyo = “ひらがな”
// カタカナ
const ka_gyo = “カタカナ”
コメント以外の日本語文字列がマッチ
その他の使用例
HTMLタグ内の値のみをマッチさせる
パターン:
(?<=<tag[^>]*>)[\s\S\r\n]+?(?=</tag>)
指定タグ内のテキストを抽出可能
まとめ
先読み・後読みには肯定・否定があり、否定はやや難しい印象ですが、慣れると効率的に処理できます。積極的に使っていきましょう!
株式会社BTMではエンジニアの採用をしております。ご興味がある方はぜひコチラをご覧ください。
-
SNS
-
投稿日
-
カテゴリー
BTM Useful