コンテンツにスキップ

正規表現 (Regular Expressions)

正規表現とは、通常の検索より複雑な条件でテキストを検索・置換するための記法である。

たとえば nicocache_nl という文字列は、\w+_\w+[a-z]+_[a-z]+ など複数の表現でマッチできる。

特に、NicoCacheのnlFiltersでは正規表現を使用することが多い。


文字クラス

記号 意味
[abc] 括弧内のいずれかに一致。ハイフンで範囲指定可
[^abc] 括弧内以外に一致
. 改行を除く任意の1文字(文字クラス内では普通の文字)
\d [0-9] と同等
\D [^0-9] と同等
\w [A-Za-z0-9_] と同等
\W [^A-Za-z0-9_] と同等
\s 空白・タブ・改行など空白文字
\S 空白以外の1文字
\t 水平タブ
\r 復帰(CR)
\n 改行(LF)
\r\n Windows改行(CRLF)。NicoCacheのReplaceでは <CRLF> も使用可
\ エスケープ。特殊文字を文字通りに評価させる
x\|y 論理和。x または y に一致

境界型アサーション

記号 意味
^ 行頭
$ 行末
\b 単語区切り
\B 単語以外の境界

先読み・後読みアサーション

記号 意味
x(?=y) y が後に続く場合のみ x に一致(肯定先読み)
x(?!y) y が後に続かない場合のみ x に一致(否定先読み)
(?<=y)x y が前にある場合のみ x に一致(肯定後読み)
(?<!y)x y が前にない場合のみ x に一致(否定後読み)

グループ

記号 意味
(x) キャプチャグループ。Match内で \1、Replace内で $1 等でアクセス可
(?:x) 非キャプチャグループ。記憶しない(パフォーマンス優先時に使用)

数量詞

記号 意味
x* 0回以上(貪欲)
x+ 1回以上(貪欲)
x? 0または1回(貪欲)
x{n} ちょうど n 回
x{n,} n 回以上
x{n,m} n 回以上 m 回以下
x*? x+? 末尾に ? で非貪欲(最短一致)になる

文字クラスの範囲

範囲 意味
[0-9] 半角数字(\d と同等)
[A-Za-z] 半角アルファベット
[ヲ-゚] 半角カタカナ
[ぁ-ん] ひらがな
[ァ-ヶ] 全角カタカナ
[0-9] 全角数字
[A-z] 全角アルファベット
[亜-熙] 第一・二水準漢字

参考例

初級:数字のみの文字列にマッチ

[0-9]+

\d+ と同等。数字が1文字以上続く部分に一致する。

入力 結果
123
42abc ✅(42 の部分)
abc

中級:ニコニコ動画の視聴URL

www\.nicovideo\.jp\/watch\/[a-z]{2}[0-9]{1,12}

./ をエスケープし、英字プレフィックス2文字 + 数字1〜12桁という構造を表現している。

入力 結果
www.nicovideo.jp/watch/sm123456
www.nicovideo.jp/watch/so6584231000
www.nicovideo.jp/watch/546985327 ❌(英字プレフィックスがない)

上級:NicoCache_nl キャッシュファイル名

^(?:(?:[a-z]{2}\d{1,9})(?:|low|kulow)\[(?:[\w-]+)(?:,(?:\d+))?,(?:\d+)\](?:\w*?))(?:_(?:.*))?(?:\.(?:flv|mp4|hls))$

非キャプチャグループ (?:...) で構造を分解し、選択肢 |・省略可 ?・文字クラスを組み合わせてキャッシュファイル名全体を検証するパターンである。