正規表現の内部処理が分かる便利ツールregex101を使ってみた

正規表現を使っているとたまに

内部でどんな処理をしているんだろう?」とか
どれだけのステップ数がかかってるんだろう?

と確認したくなる時があります。

そんな時にたまたま見つけたのが regex101 という便利ツール

これはただマッチ結果を表示するだけでなく、ステップごとに細かな処理までデバッグでできます。

使ってみて本当に便利だったので、その使い方やデバッグ方法について紹介

regex101の基本的な使い方

regex101はパターンを入力してマッチ結果を表示するツールです。

言語別の方言としてはPHP・javascript・Python・golangの4つに対応している模様

特にPHPとJavaScriptはよく使うのでこの2つが対応してるのは助かります。

参考記事 : PHP、JavaScriptでの正規表現の表し方と違いまとめ

 

それで使い方ですが、まずは regex101.com にアクセス

正規表現デバッグツールregex101のトップ画面

 

そうしたら画面内の
REGULAR EXPRESSION」の下にテストしたい正規表現パターン、
TEST STRING」にテストしたい文字列(複数行可)を入力

正規表現パターンとテスト文字列を入力

もしテスト文字列がパターンに一致した部分があるなら上の画像のように薄い青色で表示されます。

 

これがregex101の基本的な使い方

ですがこれは別に重要じゃなくて大事なのは次で紹介するデバッグ機能です。

regex101で正規表現のデバッグをする

正規表現のデバッグにはその名の通り Regex Debugger という機能が用意されています。

それを使うと具体的な処理手順とかステップ数が分かるから便利なんですよね。

そのデバッグ機能の使い方が次の通り

 

まず普通に正規表現パターンとテスト文字列を入力

そうしたら左のメニューに「regex debugger」という項目があるはずなのでクリック

メニューから「regex debugger」をクリック

ちなみにデバッグ機能はFLAVORからPHPを選んでいる場合だけ使用可能なことに注意です。

別にPHP専用のデバッグ機能ではないと思いますが、この機能自体を利用するにはPHPを選んでおくことが必要なのでそこは要注意

 

そうしたらデバッガーが表示されて、パターンに対してテスト文字列でどのような処理が行っているのか具体的な処理と一緒に表示されます。

regex101のデバッグ画面

上の画像だと分かりにくいですが、1つ1つのステップに対して正規表現のどの部分がどのテスト文字列が当てはまっているのかを緑色と薄い青色でそれぞれマーキングしてくれます。

 

これを使ってデバッグすれば

何か無駄な処理が多いな

とか

単純なパターンなのにステップ数多すぎるな

とかの分析ができるので、正規表現の最適化が捗ると思います。

かなり便利なので正規表現をよく使う人にはすごくおススメ

正規表現パターンのデバッグ例

デバッグ例1

パターン   :  /\w+berry/gm
テスト文字列 :  blueberry

上のパターンの \w  は半角英数字とアンダースコアにマッチする文字を表す

この正規表現をテストした結果がこちら

regex101正規表現デバッグ例1

最初に「blueberry」全体にマッチしているので、この処理省けないかなとか考えられそうですね。

こういう風に無駄な処理を見つけ出すことができるのがデバッグ機能の一番便利な特長

デバッグ例2

パターン   :  /\d{1,2}月\d{1,2}日/gm
テスト文字列 :  10月1日

日本語で月日にマッチするパターン

このパターンとテスト文字列でのデバッグ結果は次の通り

regex101正規表現デバッグ例1

こういう風に日本語でも問題なくデバッグ可能です。

デバッグ例3

パターン   :  /^.+(?=.js)/g
テスト文字列 :  hoge.js

後方一致 (?=)  を使ってjavascriptファイルの名前だけにマッチさせるパターン

そのデバッグ結果がこちら

regex101正規表現デバッグ例1

後方表現のようにマッチする文字列に含まれないものもデバッグ中に本当にマッチしているか確認できます。

複雑な正規表現を視覚的に理解するのにも役立ちそうです。

ここまでのまとめ

正規表現のテストツールは色々あると思いますが、ブラウザで手軽にデバッグするならこのツールは大活躍すると思います。

ということで正規表現のテストとデバッグができる regex101 というツールについてでした。

ではでは・△・)ノ バイバイ