正規表現による文字列の置換についての説明です。
置換パターン、置換文字列に単一文字を指定すると、パターンの文字を置換文字列の文字に置換できます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
ペンギン | ぺ | ポ | ポンギン |
ペンギン | ン | タ | ペタギタ |
置換パターンに単一文字、置換文字列に文字列を指定すると、パターンの文字を置換文字列に置換できます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
トナカイ | ナ | ノサマ | トノサマカイ |
山から海へ | 海 | 湖沼 | 山から湖沼へ |
置換パターンに置換文字列、置換文字列に文字列を指定すると、パターンの文字列を置換文字列に置換できます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
米国疾病管理予防センター | 米国 | アメリカ | アメリカ疾病管理予防センター |
グランドキャニオン | グランド | アンテロープ | アンテロープキャニオン |
置換パターンに置換文字列、置換文字列に空文字を指定すると、パターンの文字列を削除できます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
独自低消費電力ディスプレイ | 低消費電力 | 独自ディスプレイ | |
2013-06-04 | 2013\- | 06-04 |
以下の文字、記号は正規表現で予約されている文字のためエスケープする必要があります。正規表現でのエスケープは文字の前に"\"文字を付加します。
エスケープ文字 | エスケープ後の書式 | 意味 |
---|---|---|
\ | \\ | エスケープ文字 |
* | \* | 任意の個数 |
+ | \+ | 1個以上の個数 |
. | \. | 任意の文字 |
? | \? | 個数0または1 |
( | \( | グループ 開始 |
) | \) | グループ 終了 |
{ | \{ | 繰り返しマッチグループ 開始 |
} | \} | 繰り返しマッチグループ 終了 |
[ | \[ | 選択グループ 開始 |
] | \] | 選択グループ 終了 |
^ | \^ | 行頭に一致 / 否定 |
$ | \$ | 行末に一致 |
- | \- | 範囲を表す |
| | \| | いずれかの文字列 |
正規表現では"."で1文字分のワイルドカードを表現します。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
みかん | み.ん | りんご | りんご |
みつかん | み.ん | りんご | みつかん |
みりんかん | み.ん | りんご | りんごかん |
みつよかん | み.ん | りんご | みつよかん |
上記の例ではパターンが"み.ん"のため「み」で始まり、「ん」で終わる3文字の文字列に一致します。上記では「みかん」「みりん」がマッチするパターンになるため、これらが「りんご」に置換されます。
文字を[]で囲むことでいずれかの文字に一致するパターンを記述できます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
ABCD8EFG | [0123456789] | num | ABCDnumEFG |
Z2PP | [0123456789] | num | ZnumPP |
460 | [0123456789] | num | numnumnum |
上記の例では"[0123456789]"としたことで、0,1,2,3,4,5,6,7,8,9 の数値があった場合にnumに置換する動作となります。
以下の省略記述のメタ文字が定義されています。
書式 | 同等の正規表現式 | 意味 |
---|---|---|
\d | [0-9] | 数値のパターンを表します |
\s | [\f\n\r\t\v] | スペース、タブなどの空白文字のパターンを表します |
\w | [a-zA-Z_0-9] | 大文字、小文字のアルファベット、数値、アンダースコアのパターンを表します |
\D | [^0-9] | 数値以外の文字のパターンを表します |
\S | [^\f\n\r\t\v] | スペース、タブなどの空白文字以外の文字のパターンを表します |
\W | [^a-zA-Z_0-9] | 大文字、小文字のアルファベット、数値、アンダースコア以外の文字のパターンを表します |
書式 | 同等の文字 | 意味 |
---|---|---|
\r | \u000D | キャリッジリターン |
\n | \u000A | ラインフィード |
\t | \u0009 | タブ |
\b | \u0009 | タブ |
\a | \u0008 | バックスペース |
\v | \u000B | 垂直タブ |
\f | \u000C | フォームフィード |
\e | \u001B | エスケープ文字(1B) |
\ | メタ文字を無効にする ("\." でピリオド文字を表現) |
書式 | 意味 |
---|---|
\p{name} | "name"で指定したUnicode カテゴリ、ブロックの文字のパターンを表します |
\P{name} | "name"で指定したUnicode カテゴリ、ブロックの文字以外の文字のパターンを表します |
書式 | 意味 |
---|---|
\p{Hiragana} | ひらがな文字 |
\p{Katakana} | カタカナ文字 |
\p{Han} | 漢字文字 |
書式 | 意味 |
---|---|
\u[nnnn] | 4桁の16進数で表現されるUnicode文字 |
\x[nn] | 2桁の16進数で表現されるASCII文字 |
\[nnn] | 2桁または3桁の8進数で表現されるUnicode文字 |
n文字を表現する場合は、パターンを複数記載します。または "{(個数)}"と記述します。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
[BOOK(PHOTO)] 2001-04 # ABC | \[BOOK\(PHOTO\)\] [0-9]{4}-[0-9]{2} # | PhotoDate | PhotoData ABC |
[BOOK(PHOTO)] 2001-01 # あいう | \[BOOK\(PHOTO\)\] [0-9]{4}-[0-9]{2} # | PhotoDate | PhotoData あいう |
[BOOK(PHOTO)] 01-04 # | \[BOOK\(PHOTO\)\] [0-9]{4}-[0-9]{2} # | PhotoDate | [BOOK(PHOTO)] 01-04 # |
n文字以上を表現する場合は、 "{(個数),}"と記述します。
n文字以上かつm文字以下を表現する場合は、 "{(下限個数),(上限個数)}"と記述します。
任意文字をn文字表現する場合は"."を複数記述します。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
ホトトギス | ホ..ギ | ヤモモモズ | ヤモモモズス |
アメホシスギル | ホ..ギ | サメ | アメサメル |
上記の例ではパターンが"ホ..ギ"のため「ホ」で始まり、「ギ」で終わる4文字の文字列に一致します。上記では「ホトトギ」「ホシスギ」がマッチするパターンになるため、これらが「ヤモモモズ」や「サメ」に置換されます。
別の記述方法として".{(個数)}"と記述する方法もあります。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
すももももの木 | す.{3} | ま | まもの木 |
1文字以上の任意の文字数を表現する場合は +
を利用します。
任意の文字数を表現する場合は *
を利用します。
任意個数の任意文字を置換する場合は ".*" を記述します。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
ニホンムラサキカモシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンクロカモシカ |
ニホンアカカモシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンクロカモシカ |
ニホンサンガクカモシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンクロカモシカ |
ニホンキミドリカモシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンクロカモシカ |
ニホンイワトビカモシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンクロカモシカ |
ニホンカモシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンクロカモシカ |
ニホンシカ | ニホン.*カモシカ | ニホンクロカモシカ | ニホンシカ |
カモシカ | ニホン.*カモシカ | ニホンクロカモシカ | カモシカ |
上記の例ではパターンが"ニホン.*カモシカ"のため「ニホン」で始まり、「カモシカ」で終わるすべての文字列対して、ニホンクロカモシカへ置換します。
1つまたは0個の文字数を表現する場合は ?
を利用します。
"Penguins?"により、"Penguin", "Penguins" のどちらにもマッチします。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
PenguinsHeaven | Penguins? | ぺんぎん | ぺんぎんHeaven |
PenguinHeaven | Penguins? | ぺんぎん | ぺんぎんHeaven |
正規表現では指定しない場合、パターンにマッチする最長の文字列を検出します。
パターンにマッチする最短の文字列を検出する場合は、個数の表現、またはブロックに続けて"?"を記述します。
文字列の先頭を指定する場合には ^
を記述します。
"^りんご" のパターンでは、文字列の先頭の「りんご」にはマッチしますが、文字列中の「りんご」にはマッチしません。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
りんごが美味しい | ^りんご | Apple | Appleが美味しい |
みかんとりんごが美味しい | ^りんご | Apple | みかんとりんごが美味しい |
文字列の末尾を指定する場合は、$
を記述します。
"クッキー$" のパターンでは、文字列の末尾の「クッキー」にはマッチしますが、文字列中や先頭の「クッキー」にはマッチしません。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
ぺんぎんクッキー | クッキー$ | Cookie | ぺんぎんCookie |
チョコクッキーアイス | クッキー$ | Cookie | チョコクッキーアイス |
文字列を"|"で区切ることでいずれかの文字列に一致するパターンを記述できます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
りんごが美味しい | りんご|メロン|スイカ|ブドウ | 果物 | 果物が美味しい |
みかんが美味しい | りんご|メロン|スイカ|ブドウ | 果物 | みかんが美味しい |
メロンが美味しい | りんご|メロン|スイカ|ブドウ | 果物 | 果物が美味しい |
スイカが美味しい | りんご|メロン|スイカ|ブドウ | 果物 | 果物が美味しい |
ブドウが美味しい | りんご|メロン|スイカ|ブドウ | 果物 | 果物が美味しい |
"りんご"、"メロン"、"スイカ"、"ブドウ"の文字列が"果物"に置換されます。
"|"で区切ったパターンを一部に含む場合は"()"でくくりグループ化します。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
りんごが美味しい | (りんご|みかん|いよかん|夏みかん|メロン|梨)が | 果物が | 果物が美味しい |
みかんは美味しい | (りんご|みかん|いよかん|夏みかん|メロン|梨)が | 果物が | みかんは美味しい |
いよかんが美味しい | (りんご|みかん|いよかん|夏みかん|メロン|梨)が | 果物が | 果物が美味しい |
夏みかんは美味しい | (りんご|みかん|いよかん|夏みかん|メロン|梨)が | 果物が | 夏みかんは美味しい |
メロンが美味しい | (りんご|みかん|いよかん|夏みかん|メロン|梨)が | 果物が | 果物が美味しい |
梨は美味しい | (りんご|みかん|いよかん|夏みかん|メロン|梨)が | 果物が | 梨は美味しい |
"りんご"、"みかん"、 "いよかん"、"夏みかん"、"メロン"、"梨"に続けて"が"の文字があった場合に、"果物が"に置換されます。
("りんごが"、"みかんが"、 "いよかんが"、"夏みかんが"、"メロンが"、"梨が"の文字列が"果物が"に置換されます。)
置換パターンを"(" ")"で囲むとマッチした場合にグループとして参照できます。グループとして定義すると元の入力を変数のように扱うことができます。参照する際は最初のグループが"$1"以降"$2","$3","$4"......となります。
かっこに囲まれた1桁の数値の頭に"0"を追加して2桁に揃えます
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
Penguin (3) | \(([0-9])\) | (0$1) | Penguin (03) |
(7) test | \(([0-9])\) | (0$1) | (07) test |
Pen (9) AA | \(([0-9])\) | (0$1) | Pen (09) AA |
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
2013/08/26 | ([0-9]{4})/([0-9]{2})/([0-9]{2}) | $3 $2 $1 | 26 08 2013 |
2013/01/13 | ([0-9]{4})/([0-9]{2})/([0-9]{2}) | $3 $2 $1 | 13 01 2013 |
2011/04/18 | ([0-9]{4})/([0-9]{2})/([0-9]{2}) | $3 $2 $1 | 18 04 2011 |
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
1234 | ([0-9]{4}) | "$1" | "1234" |
PEN 3389 | ([0-9]{4}) | "$1" | PEN "3389" |
20 46 1199 | ([0-9]{4}) | "$1" | 20 46 "1199" |
4ケタの数字を「"」で囲みます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
Pen18 | (Pen)([0-9]{2}) | $100$2 | $10018 |
Pen10 | (Pen)([0-9]{2}) | $100$2 | $10010 |
上記のパターンの場合、$100が文字列として認識されてしまいます。意図としては、"$1" と "00" の文字列に分割したいです。このような場合は、$の後ろのインデックス番号を中かっこで囲みます。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
Pen18 | (Pen)([0-9]{2}) | ${1}00${2} | Pen0018 |
Pen10 | (Pen)([0-9]{2}) | ${1}00${2} | Pen0010 |
${1}
により明示的にグループの値として認識できます。
置換パターン内に (?<グループ名>正規表現式)
を記述するとマッチした場合に ${グループ名}
で元の入力を変数のように扱うことができます。グループの値を置換結果に反映できます。
かっこに囲まれた数値を = で囲みなおします。
入力 | 置換パターン | 置換文字列 | 結果 |
---|---|---|---|
ABC(100)MNP | \((?<value>[0-9]*)\) | ==${value}== | ABC==100==MNP |
ABC(45) | \((?<value>[0-9]*)\) | ==${value}== | ABC==45== |
(45)ZZXXVV | \((?<value>[0-9]*)\) | ==${value}== | ==45==ZZXXVV |