正規表現 | ワイルドカード | |
行頭、否定 | ^ | ! |
一文字 | . | ? |
0以上の文字 | .* | * |
単語の先頭 | < | |
単語の末尾 | > |
事例 | 正規表現 | 解説 |
Grep または grep | [Gg]rep | []は、文字クラスと言い、ブラケット(角括弧)で囲んだ文字のいずれかひとつとマッチすればマッチしたと判断 |
英単語 | [a-zA-Z][a-zA-Z]* | [](ブラケット)の中に「-」(マイナス)があれば、範囲指定を意味する []の中で - を指定したい場合に限り \- と前にエスケープが必要 [亜-K] は、漢字にマッチ [ァ-ヶ] 全角カタカナにマッチ [ぁ-ん] 全角ひらがなにマッチ * は、直前文字の0回以上の繰り返し 注:範囲指定は、文字コードの小さい方と大きい方で挟んで指定します。 以下のような範囲指定ができそうですが、文字コードがバラバラなので、個別に指定する必要があります。 [一-九]はダメで、[〇一ニ三二四五六七八九十]とします。(当然、どんな順に書いてもかまいません。(^^ゞ [月-日]もダメで、[月火水木金土日]とします。 |
![]() |
||
英文行 | ^((?![、-K]).)*$ | (?!パターン) は、ゼロ幅の否定的な先読み表現。 |
変数名や関数名 | [a-zA-Z0-9_-]+ または\w+ | + は、直前のパターンの1回以上の繰り返し \wは、半角の英数文字とアンダースコア(_下線)を示す、文字クラス エスケープ シーケンス(特殊変数) |
変数名や関数名 | \b[a-zA-Z0-9]+\b | \bは、単語の境界(2バイト文字に対応していないので注意) + は、直前のパターンの1回以上の繰り返し |
メイルアドレス | [A-Za-z0-9_-]+@[A-Za-z0-9.]+ | |
2004/4/17 の形式の日付 | [0-9]{4}/[0-9]{1,2} /[0-9]{1,2} | ブレース{n}で直前のパターンをn回繰り返し、 {n,}だとn回以上、 {m,n}で m回以上、n回以下にマッチ [0-9]は、特殊変数 \dでも良い |
郵便番号 123-1234 | ([0-9]{3})-([0-9]{4}) | ()は、パターンのグループ化。 グループ化した部分の優先順位が高くなるので、 パーレン(まる括弧)の中を評価した後に全体を評価します。 パーレンの中のパターンがバッファに保存できるので、置換に用います |
空白行 | ^$ または^\n または^\r (ファイルの改行指定方法で異なる) | ^ カレットは、文字列(行)の最初に、 $ は、文字列(行)の最後にマッチする。 \nは、ニューライン = LF(\x0a) 改行(ラインフィード) \r:リターン = CR(\x0d) 改行(キャリッジリターン) |
スペースを含む空白行 | ^\s*$ | \s:スペース文字 = 半角スペース(\x20) , タブ文字(水平タブ(\x09),垂直タブ(\x0b)) , 改行(CR(\x0d),LF(\x0a)) , 改ページ(\x0c) \S:スペース文字以外 |
10文字の行 | ^.{10}$ | . 改行文字以外の任意の1文字 |
指定した文字数以上の行 ここでは、10文字以上の行 | ^.{10,}$ | . 改行文字以外の任意の1文字 {n,}だとn回以上 |
test または TEST | test|TEST | | は、パターンの論理和で、複数のパターンのいずれか |
メイルの宛先やタイトル | ^(To|From|Subject |Date|Cc|Bcc|Fcc| Received|Sender): | ^ 文字列(行)の最初にマッチする。 |
This is a desk. This is a book. のisのマッチ | 最長マッチ .*is 最短マッチ .*?is 単語単位は \b.[^ ]*?is|is | .* は何でも有りを示す。 通常は最長一致のルールが適用される。 ? で最短でマッチ。 \b 単語の境界にマッチする。 |
前後の単語を指定した検索 例: 「情報」と「検索」 | 情報.*?検索 | .* は何でも有りを示す。 ? で最短でマッチ |
メイルの引用部分 | ^ *\>.*$ | ^ 文字列(行)の最初にマッチする。 |
閉じている ダブルクォーテーション文字列 | "("|.[^"]*") または ".*?" | \でエスケープされない[と、\でエスケープされない]で囲まれた最初の^は否定 |
行頭が数字でない行 | ^[^0-9].* | ブラケット(角括弧)中の初めの^は否定 |
,と,の間が12桁の部分 | ,[^,]{12}, | 途中の^は否定 |
googleは除きgooのみ検索 | goo[^g] | 途中の^は否定 |
ダブルクォーテーション から行末まで | ".[^"]*$ | $ 文字列(行)の最後にマッチする。 |
()でくくられた範囲。 3重の入れ子を含む。 単純に \(.*?\) で、下記ような文字列を検索すると、黄色の部分にマッチしてしまうので、注意! (京都(きょうと)に行く) 右のHTMLタグ入れ子検索の正規表現および解説は、 サクラエディタ掲示板の「すい」さんの記述から引用させていただきました 注:テキストの括弧の数が、正しく入れ子になっていないと、ループします。 |
\([^()]* (\([^()]* (\([^()]*[^()]*\)[^()]*)* [^()]*\)[^()]*)* [^()]*\) |
HTMLのタグの入れ子への対応方法 ↓基本パターン <[^<>]*> これで対応するタグ(括弧)だけにマッチします。 入れ子に対応するための準備として <[^<>]*[^<>]*> と変更します。(まだ入れ子非対応。) で、↑上記の [^<>]* と [^<>]* の間に (<[^<>]*[^<>]*>[^<>]*)* という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」 の記述を挿入。↓ <[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*> ↑これで2重の括弧に対応。 さらに↑上記の [^<>]* と [^<>]* の間に (<[^<>]*[^<>]*>[^<>]*)* という、「( 対応する括弧の組み合わせ+括弧とは無関係な 0字以上の文字列 )が 0回以上繰り返される」の記述を挿入。↓ <[^<>]*(<[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>]*> ↑これで3重の括弧に対応。 ↓4重入れ子まで対応 <[^<>]*(<[^<>]*(<[^<>]*(<[^<>]*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>]*>[^<>]*)*[^<>]*> |
10182 11128 20080 30020 90180 で80で終わらない行 | ^.*([^8].|[^0])$ | ^ 文字列(行)の最初にマッチする。 $ 文字列(行)の最後にマッチする。 |
htmlのタグ | <(.*?)> | * は、直前文字の0回以上の繰り返し .*は何でも有りを示す。 ? で最短でマッチ。 |
htmlのアンカータグ | <[Aa] [^>]*> | |
cssのコメント /* */ | /\*/?([^/]|[^*]/|\n)*\*/ | |
行頭以外の特定文字 (ここでは■) (トーリスさんに教えていただきました) | (?!^)■.* | (?!パターン) は、ゼロ幅の否定的な先読み表現。 サクラエディタで使えます。 |
指定した文字で始まらない行 (ここでは、行頭が 追加 ではない行) | ^(?!追加).*$ | |
指定した文字を含まない行 (ここでは 変更 を含まない行) | ^(?!.*変更).+$ | |
指定した文字で終わらない行 (ここでは、行末が 変更 ではない行) | ^.*(?!変更)..$ | 先読み否定を使う場合は、同幅で有幅の表現を置く必要があります。 行末が$でうまく行かない場合は、$の代わりに\r\nを使います。 (注:左記は、2文字以下の行にはマッチしません。 普通のperl互換の正規表現では、 m/.*(?!変更)$/ が一般的です。) この項目の全ては、 (全略) さんに教えていただいたものです。 |
^.*(?<!変更)$ | bregonig.dll など、否定の戻り読みが使える場合。 行末が$でうまく行かない場合は、\r\nを使います。 |
|
^.*[^変][^更]$ | 行末が$でうまく行かない場合は、\r\nを使います。 しみづ さんに教えていただきました。 |
|
指定した文字を含む行 (ここでは 変更 を含む行) | .*変更.*$ | |
ハイフンを一つだけ含む行 | ^[^-]*-[^-]*$ | ブラケット(角括弧)中の初めの^は否定 |
半角空白2桁のみ連続 | \S \S | \S:スペース文字以外 |
[^ ] [^ ] | ブラケット([角括弧])中の初めの^は否定 | |
英数記号の連続10桁以上で終わる行 (例えば、下のような行 ABCD 123 CUDR-U.MULKO EFGHIJK 25 BLOCK->HANTAI) | ^.* [a-zA-Z0-9<>\.\(\)/-]{10,}$ | [](ブラケット)の中で、文字として「-」(ハイフン)を指定したい場合は、最後に持ってくる |
全角文字 (半角文字以外) | [^ -~。-゚] または、[^\x01-\x7E] | サクラエディタ掲示板で、ds14050 さんに教えていただきました。 [^ -~。-゚]は、ASCII(形を持った文字部分)と半角カナ以外ということで、ASCII制御文字(改行含む)とShift_JISの先行バイトにマッチします。 |
全角文字 | [^\x01-\x7E] | 『\x01-\x7E』は、文字コード SHIFT_JIS で半角文字の範囲 ASCII 以外で、改行にマッチせずに、半角カナにはマッチします。 |
半角文字 | [!-~] | こちらの ASCII 表を参照下さい |
"の数が、一行中に19個ある行 | ^"(.*?"){18}$ | CSVを Access にインポートしたとき、 "の数が合わなくてエラーになった 下図参照 該当行が、前もって分かっているときは、 カーソルを近くの行まで持っていってから検索しないと、時間がかかります(^^ゞ |
事例 | 正規表現 | 解説 |
POSIX クラス | 対応する表現 | 意味 |
---|---|---|
[:upper:] | [A-Z] | 大文字 |
[:lower:] | [a-z] | 小文字 |
[:alpha:] | [A-Za-z] | アルファベット |
[:alnum:] | [A-Za-z0-9] | 数字とアルファベット |
[:digit:] | [0-9] | 数字 |
[:xdigit:] | [0-9A-Fa-f] | 16進数 |
[:punct:] | [.,!?:...] | 句読点 |
[:blank:] | [ \t] | スペースとタブ |
[:space:] | [ \t\n\r\f\v] | 空白文字 |
[:cntrl:] | \c[ | 制御文字 |
[:graph:] | [^ \t\n\r\f\v] | 印字文字 |
[:print:] | [^\t\n\r\f\v] | 印字文字とスペース |
例: [[:upper:]ab] は、大文字と a と b のみにマッチします。
[^[:alnum:]] は、「半角英数字以外の文字列」にマッチします。
いくつかのツールで使用できる、POSIX にないクラスとして [:word:] があります。[:word:] は通常 [:alnum:] とアンダースコアの組合せになります。
これらが多くのプログラミング言語で識別子として使用できる文字だからです
正規表現で制御文字を除去する方法
http://blog.livedoor.jp/xaicron/archives/50948539.html
半角文字に合致する正規表現
http://www.4d.com/jp/blog/regex-hankaku.html
正規表現(Perlの小部屋)
http://www.komonet.ne.jp/~perl/chap7.htm
略記法 | 文字クラス | 意味 |
---|---|---|
\w | [a-zA-Z0-9_] | アルファベット、数字、下線 |
\W | [^a-zA-Z0-9_] | アルファベット、数字、下線以外 |
\s | [\r\t\n\f] | 空白文字(スペース、復帰文字、タブ、改行文字、ラインフィード) |
\S | [^\r\t\n\f] | 空白文字以外 |
\d | [0-9] | 数字 |
\D | [^0-9] | 数字以外 |
文字列 | シフトJISコード | アスキーコード |
---|---|---|
0123456789 | &h824F〜&h8258 | &h30〜&h39 |
全角アルファベット大文字(ABC・・) | &h8260〜&h8279 | &h41〜&h5A |
全角アルファベット小文字(abc・・) | &h8281〜&h829A | &h61〜&h7A |
事例 | 正規表現 | 解説 |
1番目、2番目、3番目を NO.1、NO.2、NO.3に | (\d+)番目 /NO.\1 | \dは数字 + は、直前のパターンの1回以上の繰り返し |
ローマ字の名・姓を、姓・名に Makoto WATANABE →WATANABE Makoto | ^([a-zA-Z]+) +([a-zA-Z]+) /\2 \1 | |
「10/20'2004」を 「2004/10/20」に | ([0-9]{1,2})/([0-9]{1,2})'([0-9]{4}) /\3/\1/\2 | [0-9]は\dでも良い |
「2004/04/17」を 「2004年04月17日」に | ([0-9]{4})/([0-9]{1,2})/([0-9]{1,2}) /\1年\2月\3日 | [0-9]は\dでも良い |
「12.345.12」を 「12345.12」に 欧州では、 数字の3桁区切りに、 「,」ではなく「.」を使う。 これを削除。 | (\d{1,3})\.(\d{3})\.(\d\d) /\1\2.\3 | \. は、リテラルとしての「.」 |
「プリンタ」を 「プリンター」に | プリンタ([^ー]) /プリンター\1 | ^ は、「含まれていない場合」と言う否定的な指定 「ー」以外の次の1文字まで選択しておいて、置換するテクニック |
行末が「>」でない行に 「<br>」を追加 | ([^>])\r\n /\1<br>\r\n | ^ は、「含まれていない場合」と言う否定的な指定 前行と同じテクニック |
行末が「,」でない行に 「,」を追加 | ^(.*[^,])$ /\1, | ^ は、「含まれていない場合」と言う否定的な指定 一行丸ごとつかんで、変換する方法 |
シングルクォーテーション で括られた5桁以上の数値から シングルクォーテンションを外す | '(\d{5,})'/$1 | バッファ呼び出しは、$1でもできる |
指定した文字数で改行 ここでは、40文字で改行 | (.{40})/\1\n | \1 で指定文字数のバッファを書き出して、 改行文字 \n を追加 |
htmlのタグ消去 | <!--(.|\n)*-->|<([^>]|\n)*> | |
空白行の削除 | ^\n/ step1.「\r\n/\n」 step2.「^\n+/」 step3.「\n/\r\n」 | テキストエディタに付属している整形機能や、クリップボード・ツールを使ったほうが便利 |
指定した文字を含む行を削除 (ここでは 変更 を含む行) | .*変更.*\n/ | さくらエディタの じゅうじ さんの掲示から、無断引用 |
日本語の削除 英日対訳から日本語部分を削除 | [、-K] | |
「行頭以外の特定文字(ここでは■)」から行末までの削除 (げんたさんと、もかさんに教えていただきました) |
(.)■.* /\1\r または、 ^(.[^■]*)■.* /\1\r | 特定文字の左側を、別にバッファに入れて、書き戻すテクニックです。 置換後の\rは行末までの指定で\r\nの\rも食べられてしまう場合に入れます |
日本語文字列+半角空白+英語 の「半角空白」で改行 |
([亜-Kァ-ヶぁ-ん)\]〉]) ([a-zA-Z].*)$ /$1\r\n$2 | 字幕データで、1セルに複数単語が入っているものを、分割して、単語リストにするために使っています 文字クラス指定の中では \を前に置かなくても、その文字自身を表わします。 |
数字4桁の場合は、頭に0を付加 | ^([0-9]{4})$ /0\1 | |
数字4桁の場合は、頭に0を付加 | ^([0-9]{4})$ /0$& | $& は、現在のスコープで最後に成功した正規表現のパターンマッチでマッチした文字列 |
事例 | 正規表現 | 解説 |
![]() |
![]() |