正規表現を使っているとたまに
「内部でどんな処理をしているんだろう?」とか
「どれだけのステップ数がかかってるんだろう?」
と確認したくなる時があります。
そんな時にたまたま見つけたのが regex101 という便利ツール
これはただマッチ結果を表示するだけでなく、ステップごとに細かな処理までデバッグでできます。
使ってみて本当に便利だったので、その使い方やデバッグ方法について紹介
regex101の基本的な使い方
regex101はパターンを入力してマッチ結果を表示するツールです。
言語別の方言としてはPHP・javascript・Python・golangの4つに対応している模様
特にPHPとJavaScriptはよく使うのでこの2つが対応してるのは助かります。
参考記事 : PHP、JavaScriptでの正規表現の表し方と違いまとめ
それで使い方ですが、まずは regex101.com にアクセス
そうしたら画面内の
「REGULAR EXPRESSION」の下にテストしたい正規表現パターン、
「TEST STRING」にテストしたい文字列(複数行可)を入力
もしテスト文字列がパターンに一致した部分があるなら上の画像のように薄い青色で表示されます。
これがregex101の基本的な使い方
ですがこれは別に重要じゃなくて大事なのは次で紹介するデバッグ機能です。
regex101で正規表現のデバッグをする
正規表現のデバッグにはその名の通り Regex Debugger という機能が用意されています。
それを使うと具体的な処理手順とかステップ数が分かるから便利なんですよね。
そのデバッグ機能の使い方が次の通り
まず普通に正規表現パターンとテスト文字列を入力
そうしたら左のメニューに「regex debugger」という項目があるはずなのでクリック
ちなみにデバッグ機能はFLAVORからPHPを選んでいる場合だけ使用可能なことに注意です。
別にPHP専用のデバッグ機能ではないと思いますが、この機能自体を利用するにはPHPを選んでおくことが必要なのでそこは要注意
そうしたらデバッガーが表示されて、パターンに対してテスト文字列でどのような処理が行っているのか具体的な処理と一緒に表示されます。
上の画像だと分かりにくいですが、1つ1つのステップに対して正規表現のどの部分がどのテスト文字列が当てはまっているのかを緑色と薄い青色でそれぞれマーキングしてくれます。
これを使ってデバッグすれば
「何か無駄な処理が多いな」
とか
「単純なパターンなのにステップ数多すぎるな」
とかの分析ができるので、正規表現の最適化が捗ると思います。
かなり便利なので正規表現をよく使う人にはすごくおススメ
正規表現パターンのデバッグ例
デバッグ例1
パターン :
/\w+berry/gm
テスト文字列 :
blueberry
上のパターンの \w は半角英数字とアンダースコアにマッチする文字を表す
この正規表現をテストした結果がこちら
最初に「blueberry」全体にマッチしているので、この処理省けないかなとか考えられそうですね。
こういう風に無駄な処理を見つけ出すことができるのがデバッグ機能の一番便利な特長
デバッグ例2
パターン :
/\d{1,2}月\d{1,2}日/gm
テスト文字列 :
10月1日
日本語で月日にマッチするパターン
このパターンとテスト文字列でのデバッグ結果は次の通り
こういう風に日本語でも問題なくデバッグ可能です。
デバッグ例3
パターン :
/^.+(?=.js)/g
テスト文字列 :
hoge.js
後方一致 (?=) を使ってjavascriptファイルの名前だけにマッチさせるパターン
そのデバッグ結果がこちら
後方表現のようにマッチする文字列に含まれないものもデバッグ中に本当にマッチしているか確認できます。
複雑な正規表現を視覚的に理解するのにも役立ちそうです。
ここまでのまとめ
正規表現のテストツールは色々あると思いますが、ブラウザで手軽にデバッグするならこのツールは大活躍すると思います。
ということで正規表現のテストとデバッグができる regex101 というツールについてでした。
ではでは・△・)ノ バイバイ