================================================================================ TresGrepの正規表現検索について (最終更新 : 2019.09.20) ================================================================================ TresGrepでは検索キーワードに正規表現を利用できます。 (「正規表現」とは、ワイルドカードよりももっと複雑・高度な検索キーワードの条件を 記号文字を用いて指定する方法、ないしその検索条件を表記した文字列のことです) TresGrepでは、.NET Frameworkが提供している正規表現がすべて利用できます。 最短一致、先読み後読み・否定、前方後方参照などの指定も可能です。 利用可能な正規表現は、Microsoft Docs「正規表現言語 - クイック リファレンス」 https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/regular-expression-language-quick-reference に記載されています。必要に応じ参照ください。 ※TresGrep Ver1.05/1.09以降は、「鬼雲」の正規表現を用いた検索/置換も可能です。 bregonig.dll公式ページ http://k-takata.o.oo7.jp/mysoft/bregonig.html より 最新バージョンzipをダウンロード・解凍のうえ、TresGrep.exeと同じフォルダに 32bit版bregonig.dll(x64ではなくフォルダ直下のほうのファイル)を配置すると、 「鬼雲」から始まる名前の検索モードが使用可能になります。 鬼雲で利用可能な正規表現は、公式ページ「検索パターン」「置換パターン」を 参照ください。 http://k-takata.o.oo7.jp/mysoft/bregonig.html#SCT-5.1 http://k-takata.o.oo7.jp/mysoft/bregonig.html#SCT-5.3 なお、鬼雲検索では「検索文字列/位置/備考にキャプチャ」は利用できません。 以下に、よく使う正規表現やTresGrep特有の正規表現利用について、簡単に解説します。 ※「入力欄右クリックで正規表現挿入」チェックON時に正規表現挿入メニューで 選択可能な正規表現/表示されるツールヒントと同一内容です。 若干見ずらいです。。。 正規表現の書き方の基本を押さえたい方は、内容が簡潔明快にまとまっている 「正規表現の機能の覚書き」のほうを参照したほうがいいかと思います。 https://anond.hatelabo.jp/20080923015641 【1】出現位置に関する限定を表す正規表現 いずれも正規表現の先頭ないし末尾で使用することで、 特定の文字列で始まる/終わる行を検索することができます。 ^● 行頭 行頭が「●」の文字列から始まっている行を検索します。 ●$ 行末 行末が「●」の文字列で終わる行を検索します。   ただし「行またぎ検索」でCRLF(\r\n)改行のファイルを検索する場合の行末は 「●\r$」と指定してください。(行またぎ検索時は「$」=\nを検出します) 単語検索の指定を正規表現であらわすことも可能です。 \b 単語境界 「\b」の位置が単語の区切りとなっている箇所を検索します。 例:「font\b」⇒「fonts」や「fontstyle」はマッチしません。 【2】なんらかの条件を満たす1文字を表す正規表現 ワイルドカード「?」のような表現については、 以下のような表記を使うことで対象となる文字を限定することができます。 . 任意の1文字 ワイルドカードの「?」と同じです。任意の1文字に対応します。 [●] []内の1文字 ●の文字列のうちどれか1文字に対応します。 例:[0123456789ABCDEF]、[こそあど]ちら [^●] []以外の1文字 ●の文字列以外のどれか1文字に対応します。 例:[^abc]なら、a,b,c以外 [●-●] 範囲内の1文字(例[A-F]) ハイフンで指定した範囲の1文字に対応します。 例:[A-Z]で英大文字26文字を指定。 [0-9A-F][0-9ABCDEF]などと複数範囲指定や混在記述もできます。 \d 数字1文字 数字1文字に対応します。(全角数字も対象に含まれます) [0-90-9]と書くのと同じ結果が得られます。 \w 通常文字(空白類や記号以外) 英数文字・かな・漢字およびアンダーバー等、単語に使用される文字1文字に対応します。 \s 空白類1文字 全角半角スペース・タブ・改行文字等の1文字に対応します。 \t タブ(複数行入力でTab直接入力も可) タブ(\u0009)1文字に対応します。 複数行入力テキストボックスにて直接Tabキーを入力しても同じ結果が得られます。 改行 改行は複数行入力でEnterキー入力(※) 改行文字は、本来であれば検索ファイルの改行コードに応じ 「\r\n」「\n」もしくは「(\r\n?|\n)」などと書く必要がありますが、 TresGrepでは複数行入力でテキストボックスに入力された改行を 適切な正規表現へと自動変換して検索します。 【3】繰り返し回数を表す正規表現 直前の「●」部分の文字(もしくはカッコでくくったグループ)が何回出現するかを 条件として指定できます。 ワイルドカード「*」のような指定について、直前の「●」の文字を詳細に限定でき、 なおかつ登場回数についても制御が可能になったものと考えてください。 ●? 0回または1回 「?」の直前の文字はあってもなくてもマッチします。 例:「私達?は」⇒「私は」「私達は」両方がマッチ ●* 0回以上の最長一致 例1:「すごー*い」⇒「すごい」「すごーい」「すごーーーい」いずれもマッチ 例2:「.*」=任意の0文字以上にマッチ=ワイルドカードの「*」とほぼ同じです。 ●+ 1回以上の最長一致 例:「すごー+い」⇒「すごい」はマッチせず、「すごーい」「すごーーーい」にはマッチ ●{,} 回数指定(例{1,5}) 繰り返し回数を、{最小回数,最大回数}という形式で具体的に数値指定します。 最小回数のみの指定や、カンマ無で回数固定の指定もできます。 例:「\d{2,}-\d{1,4}-\d{4}」⇒「03-9999-9999」などにマッチ ●*? 0回以上の最短一致 例「

title

」に対する検索: 「<.*>」⇒「.*」を最長に解釈し「

title

」がマッチします。 「<.*?>」⇒「.*?」を最短に解釈し「

」と「

」がマッチします。 ●+? 1回以上の最短一致 例「1.+?0」⇒「10」はマッチせず、 「150.9」「15000」はいずれも条件を満たす最短の「150」の部分がマッチします。 【4】グループ化を表す正規表現など カッコでくくった範囲などを文字列のひとかたまりとしてまとめたり、カッコの範囲に 特別な役割や意味を持たせたりすることができます。 ●|● または 縦棒区切りのいずれかの文字列と一致している箇所を検索します。 例:「いちご|りんご」「(道路|水道|配線)工事」 (●) グループ化 カッコ内を1文字相当のひとかたまりとして扱います。 例:「(ヒマ)+」⇒「ヒマ」「ヒマヒマヒマ」などがマッチ (?=●) 先読み 直後に「●」の表現が現れる箇所を検索しますが、●はマッチ文字列に含みません。 (?!●) 否定先読み 直後に「●」の表現が現れない箇所を検索します。●はマッチ文字列に含みません。 (?<=●) 後読み 直前に「●」の表現が現れた箇所を検索しますが、●はマッチ文字列に含みません。 (?●) 検索文字列にキャプチャ(※) マッチ箇所一覧の「検索文字列」に、検索してマッチした文字列全体ではなく 検索キーワードの「●」部分で指定した表現に対応する部分のみを表示します。 (※)TresGrep独自機能です。鬼雲検索では使用できません。 (?<位置>●) 位置にキャプチャ(※) マッチ箇所一覧の「位置」列に、検索キーワードのうち 「●」部分で指定した表現に対応する内容を表示します。 (※)TresGrep独自機能です。「位置」列は通常時にはExcelのシート名等が表示されます。   鬼雲検索では使用できません。 (?<備考>●) 備考にキャプチャ(※) マッチ箇所一覧の「備考」列に、検索キーワードのうち 「●」部分で指定した表現に対応する内容を表示します。 (※)TresGrep独自機能です。鬼雲検索では使用できません。 【5】その他「\」から始まるエスケープシーケンスでよく使うもの 以下、正規表現挿入メニューには未定義ですが、個人的には以下のような正規表現もよく使うかと思います。 \\ 文字として「\」を指定 「\」をエスケープシーケンスとしてではなく検索する文字として指定します。 \. 文字として「.」を指定 「.」を任意の1文字ではなく検索する文字として指定します。 ほか同様に、正規表現で意味を持つ記号は「\」でエスケープして 「\(」「\)」「\[」「\]」「\?」「\*」「\+」「\$」「\^」「\|」などと指定します。 \x## 特定の1文字を文字コード16進数2桁で指定します。(鬼雲正規表現では「A」→「\x41\x00」などと指定) \u#### (.NET Framework正規表現)特定の1文字をUnicode文字コード16進数4桁で指定します。 \x{####} (鬼雲正規表現)特定の1文字をUnicode文字コード16進数4桁(サロゲート文字は6桁)以内で指定します。 \W 空白・記号文字等、単語を構成しない種類の文字1文字を表現します。 ================================================================================ 正規表現挿入メニュー、およびそのカスタマイズ ================================================================================ 検索キーワード入力欄右隣の入力モード切替メニュー「右クリックで正規表現挿入」を ONにし(かつ正規表現検索ONの状態で)キーワード入力欄を右クリックすると、 よく使う正規表現を挿入するためのプルダウンメニューが表示されます。 この正規表現挿入メニューは、TresGrep.exeが置かれているフォルダの 「TresGrep_Regex.txt」を書き換えることで、内容をカスタマイズできます。 以下のルールで「TresGrep_Regex.txt」を記述してください。 (1)メニュー項目定義行はTab(または「#」1文字)で開始し、半角スペース区切りで 「挿入する正規表現リテラル」「概要説明」「ツールヒント内容」を記述する。 (挿入前に選択されていたテキスト内容で置き換える部分は、「●」にしておく) ツールヒントが1行に収まりきらない場合は、その直後の行もTab(または「#」)で 開始し、ツールヒントの次の行の内容を記述する。 (2)メニュー項目定義行以外の行は、行頭をTab(または「#」1文字)以外の文字列にする。 (3)メニュー項目/次のメニュー項目の間には、 行頭がTab(または「#」1文字)始まりではない行を1行以上書く。 (4)メニューの区切り線を入れたい場合は、 Tab(または「#」)のみが記述されている行を1行記述する。(前後1行以上空ける) ヘルプ「正規表現挿入について」で表示される内容が TresGrep_Regex.txt の既定内容(=そのまんま記述例)です。 メニュー内容を既定内容に戻したい場合は、「TresGrep_Regex.txt」を削除するか、 ファイル内容をヘルプ「正規表現挿入について」の内容で差し替えてください。 TresGrep.exe起動中に TresGrep_Regex.txt を差し替えた場合は、 「入力欄右クリックで正規表現挿入(R)」メニューのチェックをOFF⇒ONにしなおすと 差し替え後のメニュー内容が反映されます。 ================================================================================ その他正規表現に関する補足 ================================================================================ TresGrepのキーワード検索機能(ワイルドカード指定等)も、基本的にはすべて 正規表現を利用して実現しています。 Grep実行時に実際に使用された正規表現は、[結果出力]メニューの[検索結果概要を表示] で表示される内容のうち「TextRegex」の行に出力されますので、参考にしてください。 ただし以下の機能については正規表現文字列指定以外の方法で実現しています。 (1)キーワードオプション「英大文字/小文字を区別しない」 正規表現エンジンに対しRegexOptions.IgnoreCaseを指定。 (ファイル名に対する正規表現は常にIgnoreCaseを指定) 鬼雲検索時は正規表現オプション"i"を指定。 (2)キーワードオプション「全角半角を区別しない」 検索文字列/検索対象ファイルの内容をすべて全角⇒半角に変換し検索。 かな濁音半濁音は、検索文字列を「(パ|ぱ|パ)」といった正規表現に置き換え。 (3)キーワードオプション「正規表現コメント使用」 RegexOptions.IgnorePatternWhitespace オプションを指定。 鬼雲検索時は正規表現オプション"x"を指定。 (4)検索モード「通常検索」「行集約検索」 検索対象ファイルの1行ごとにRegex.Match()を実行、検索文字列が含まれているか確認。 (5)検索モード「行またぎ検索」「行またぎ厳密検索」 検索対象ファイル全体に対して1回でまとめてRegex.Match()を実行。 RegexOptions.Multilineを指定。 (厳密のほうではない「行またぎ検索」はRegexOptions.SingleLineも指定あり、 ワイルドカードが改行\nにもマッチします) 鬼雲検索時は正規表現オプション"m"または"ms"を指定。 (6)検索モード「鬼雲行またぎ検索R」「鬼雲行跨厳密検索R」 鬼雲正規表現オプション"R"も指定することにより、CRLFも改行として扱うよう対応。 (7)キーワードオプション「鬼雲正規表現オプションaを適用」によるASCII/Unicodeの切替 鬼雲正規表現オプション"a"/"u"の指定切り替えにより実現。