LazowskiAnton · Extensions

RegexSmith

正規表現を、書いたその場所で説明・テストします。C# のパターンにマウスを合わせると、各部分がわかりやすい言葉で 1 行ずつ、グループが色分けされ、一致する文字列が表示されます。ハングする可能性のあるパターンには下線が引かれます。自分のサンプルを RegexSmith テスター で試し、クリック 1 回でパターンをコードに書き戻せます。

無料 · Visual Studio 2022 と 2026 · UI は 14 言語 · テレメトリなし

RegexSmith を選ぶ理由

[GeneratedRegex] のパターン上のホバー カード: グループが色分けされたパターン、各部分をわかりやすい言葉で説明する行、一致するサンプルと一致しないサンプル 1 つ、そして状態 ✓ 安全

構文の講義ではなく、わかりやすい言葉で

^(?<year>\d{4})-(?<id>\d{1,5})$ は「テキストの先頭」「数字がちょうど 4 個」「数字が 1~5 個」になります — 部分ごとに 1 行、所属するグループの下に入れ子で並び、グループごとに独自の色が付きます。

本物のエンジンで確認

カードのサンプルとテスターのすべての結果は、呼び出しのオプションを使って .NET の正規表現エンジンそのものから得られます。表示されるとおりにアプリも動作します。

ハングする可能性のあるパターン

([a-z0-9]+\.?)+ は無害に見えますが、ほぼ一致する長い文字列でリクエストをフリーズさせることがあります。RegexSmith はこうした繰り返しに下線を引き、Ctrl+. で修正します。

無料、条件なし

サブスクリプションも「Pro」版もデータ収集もなく、出力ウィンドウや起動時のメッセージもありません。パターンとサンプルはお使いのコンピューターに保存されます。唯一お願いするのは、しばらくお使いいただいた後に、Marketplace での評価です。Visual Studio 2022 と 2026、x64 と ARM64 で動作します。

機能

ホバー カード

パターンの文字列にマウスを合わせると、Visual Studio の通常のツールヒントに RegexSmith のカードが加わります。パターンの意味、何に一致するか、安全かどうかがわかります。

ホバー カード: 種類とオプションを示すヘッダー、グループが色分けされたパターン、グループの下に入れ子になった部分ごとの行、サンプル、パターンをテスト ボタン

動作する場所

C# ファイルで、次のもののパターン上:

通常の文字列、逐語的文字列 (@"…")、生文字列 ("""…""") はコンパイラと同じように読み取られるので、"\\d" と @"\d" は同じパターンです。

カードに表示されるもの

画面上の表示意味
RegexSmith · .NET 正規表現 · IgnoreCaseパターンの種類と呼び出しから読み取ったオプション、右側に状態。
パターン各キャプチャ グループのかっこはその色で、中身はその色で下線が引かれます。テキストはテーマの色のままなので、読みやすさは保たれます。
数字がちょうど 4 個部分ごとにわかりやすい言葉で 1 行 — 「テキストの先頭」「次のいずれかのテキスト: “jpg”, “png”」「数字が 1~5 個」 — 所属するグループの下に入れ子で並びます。非常に長いパターンは … 他 N 行 で終わります。
グループ タグ各グループの名前または番号を、その色のタグで表示します — パターン内やコードの下線と同じ色です。
✓ 一致: … ✗ 不一致: …一致する文字列 2 つと一致しない文字列 1 つ。パターンから作られ、本物の .NET エンジンで確認されます。スペースは薄い点で表示されます。
▶ パターンをテスト…パターンを RegexSmith テスターで開きます。

状態

画面上の表示意味
✓ 安全.NET がパターンを受け付け、その中に壊滅的なバックトラックを起こしうるものがありません。
⚠ ハングの可能性ほぼ一致する長い入力で、ある繰り返しが指数時間かかる可能性があります。カードにはその種類 (RX001) と、Ctrl+. で修正が提供されることが表示されます。
✕ 無効エンジンがパターンを拒否しました。カードにはそのメッセージが表示されます: .NET はこのパターンを受け付けません: …

「安全」が意味するのはそれだけです: .NET がパターンを受け付け、ハングしえないということ。意図したものに一致するという意味ではありません — それを確かめるのがサンプルとテスターです。

グループの下線

パターンのすべてのキャプチャ グループに、コード内でその色の細い線が引かれます — カードと同じ色です。グループが 5 つある長いパターンも一目で読めます: どの部分が年で、どれが ID か。

別のグループの中にあるグループは少し下に表示されるので、両方の線が見えます。色は順番に、サーモン、緑、青、紫、琥珀、ティール — そして繰り返し。

下線は設定でオフにできます: キャプチャ グループに下線を引く。

ハングする可能性のあるパターン

パターンによっては、ほぼ一致する長い文字列で指数時間かかります — 正規表現が Web リクエストをフリーズさせる典型的なパターンです。RegexSmith はこれらを形から見つけ、繰り返しの下に警告の波線を引きます。マウスを合わせると理由が表示されます。

([a-z0-9]+\.?)+ の下の RX001 の波線と、開いた Ctrl+. メニュー、修正のプレビュー: 取り消し線付きの古いパターンと、アトミック グループを使った新しいパターン

下線が引かれるもの (RX001)

アトミック グループや先読み・後読みの中では対象外で、RegexOptions.NonBacktracking では決して起きません — そこでは発生しえないからです。

Ctrl+. での修正

キャレットを波線に置いて Ctrl+. を押します — 各修正にはプレビューが表示されます: 変更前 (取り消し線付き) と変更後のパターン。

修正内容
内側の繰り返しをアトミックにする: (?>…)内側の繰り返しを (?>…) で囲みます。一致する文字列は同じです。繰り返しを何通りにも分割することはなくなります。
RegexOptions.NonBacktracking を使用する (.NET 7+)呼び出しにオプションを追加します。どの入力でも線形時間です。.NET 7 以降が必要です。パターンが許す場合のみ提供されます — 後方参照、先読み・後読み、アトミック グループやバランス グループ、条件式がないこと。
RegexSmith でこのパターンをテストパターンをテスターで開きます — 危険なパターンに限らず、どのパターン上でも提供されます。

RX001 は設定 (エディターのヒント) またはツールチップの この種類のヒントを表示しない でオフにできます。Ctrl+. の修正は引き続き使えます。

テスター

RegexSmith テスター は検索結果の隣にドッキングして開きます。パターンはコードから取り込まれ、コードとのリンクが保たれます: 自分のサンプルで試し、変更して、書き戻せます。

RegexSmith テスター: ソースへのリンク、パターン、状態行、オプション チップ、期待値付きで強調表示されたグループを持つサンプル、赤い誤りの行、グループの表、ボタン

開き方

パターンとそのオプション

上部にはパターンのファイルと行 — クリックするとそこへ移動します。その下にパターンのボックス、状態行 (✓ 安全、⚠ ハングの可能性、またはエンジンのエラー、続いて M 件中 N 件が期待どおり · ms)、オプション チップ: IgnoreCase、Multiline、Singleline、IgnorePatternWhitespace、ExplicitCapture、RightToLeft、CultureInvariant。変更するたびにすぐ再実行されます。

サンプルと期待値

最初は、カードのサンプルが入っています: 一致すべきもの 2 つと一致すべきでないもの 1 つ。新しいサンプルは サンプルを追加して Enter キーを押します… に入力します。サンプルをクリックすると編集でき、✕ で削除します。各サンプルの前の記号はそれがどうなるべきかを示します — クリックで変更できます:

画面上の表示意味
✓一致するべき
✗一致しないべき
–期待値なし、表示のみ

逆の結果になったサンプルは赤くなります — ✗ 一致 または ✗ 不一致 — こうしてサンプルはパターンの小さな仕様になります。一致部分は色付けされ、グループはその色で下線が引かれ、スペースは点で表示されます。1 秒を超える実行は ⏱ 遅すぎます で停止します。

選択したサンプルのグループ には、選択したサンプルのすべての一致が表示されます: 一致全体、続いて各グループの値と位置 (関与しなかった場合は キャプチャなし)。

置換

置換 タブでは置換文字列のボックスが追加され — $1、${name}、$ は $$ — 各サンプルの結果が Regex.Replace と同じように表示されます。

コピー、元に戻す、適用

単体テストとしてコピー は、サンプルを使ったテストを xUnit、NUnit、MSTest 向けにクリップボードへコピーします — 仕様がテスト プロジェクトへ移ります。

元に戻す はコードのパターンとオプションに戻します。サンプルは残ります。

コードに適用 は、パターンを元と同じ種類のリテラル (通常、逐語的、生) としてオプションと共に書き戻します — 1 回の元に戻す操作で取り消せます。テスターで開いた後にそのコードが変更されていた場合は何も書き込まれません: パターンからもう一度テスターを開いてください。

サンプルはパターンごと、ソリューションごとに %LocalAppData%\RegexSmith\samples に記憶されるので、次回もそのまま残っています。リポジトリには何も入りません。

設定

ツール › オプション › SmithWorks › RegexSmith。各オプションに、何をするかの短い説明があります。

オプション既定値
ホバー時にパターンを説明するオン
キャプチャ グループに下線を引くオン
RX001 壊滅的なバックトラッキングオン
Marketplace での評価をお願いするオン

下部には 既定値に戻す、ドキュメント、Marketplace で評価、フィードバックの送信 があります。

設定は %LocalAppData%\RegexSmith に保存されます。

RegexSmith のオプション ページ
オプション ページ。

よくある質問

RegexSmith は何かデータを送信しますか?

いいえ。パターンは開いているドキュメントから読み取られ、お使いのコンピューター上で実行されます。サンプルは %LocalAppData%\RegexSmith に保存されます。ネットワーク通信もテレメトリもありません。

カードに「✓ 安全」と表示されます。パターンは正しいのですか?

そうとは限りません。「安全」とは、.NET がパターンを受け付け、その中のどの繰り返しも壊滅的なバックトラックを起こしえないという意味です。意図したものに一致するかどうかはサンプルで確かめます: テスターでサンプルに ✓ または ✗ を付けてください。

自分のパターン上にカードが表示されないのはなぜですか?

カードは、RegexSmith がパターンだと認識できる文字列リテラル上に表示されます: new Regex、Regex の静的メソッド、[GeneratedRegex]、[RegularExpression] の引数、またはそこで使われている同じファイルの定数です。実行時に組み立てられるパターン (連結されたもの、設定から読み込まれたもの) は読み取れません。設定の ホバー時にパターンを説明する も確認してください。

どの正規表現エンジンが使われますか?

Visual Studio 自体が動作している .NET の正規表現エンジンを、呼び出しのオプションで使います。RegexOptions.NonBacktracking (.NET 7+) も呼び出しから読み取られます。その場合サンプルは通常のエンジンで実行されますが、どちらでも一致する文字列は同じです。

コードに適用しても何も起きませんでした。

テスターで開いた後にパターンのコードが変更されたため、RegexSmith はもうパターンがないかもしれない場所には書き込みません — テスターのボタンの下にその旨が表示されます。パターンからもう一度テスターを開いてください。コードにオプションを書く場所がない場合 ([RegularExpression] はオプションを受け取りません)、パターンは書き込まれますがオプションは書き込まれません。

VB.NET、JavaScript、TypeScript でも動作しますか?

1.0 では動作しません: C# のみです。他の言語は別のエンジンを使います。必要な場合は Feedback リポジトリでリクエストしてください。

問題の報告や機能の提案はどこでできますか?

GitHub の Feedback リポジトリで Issue を作成してください。バグとアイデア用のフォームがあります (非公開の名前は変更してください)。Marketplace の Q&A タブもご利用いただけます。

変更履歴

1.0.1

1.0.0