初心者でもわかる正規表現のポイント 【これだけである程度自由にテキスト置換できる】

  • 投稿 : 2013-05-19
  • 更新 : 2018-04-11

本記事は広告およびアフィリエイトプログラムによる収益を得ています


エディターやSearch Regex(Wordpressのプラグイン)で正規表現を少しでも使えると便利だと思います。
私は、正規表現がどうも苦手て何年たっても理解できないんですが、最低限これだけでもわかればいろんなことができますよということで自分用+アルファとしてまとめてみました。

「正規表現の方言」というのもあるみたいなので、どこまで一般的なのかは私にはわかりません。エディター(サクラエディター、秀丸)とかで使えれば個人的には問題ないので・・・。

はじめに

 * や . (ワイルドカード)について

ファイルの検索とかで[*]を使ったことがあるかと思います。この場合は以下のような意味でした。

* 任意の長さの文字(0文字以上)
? 任意の1文字(0文字も可)

これを正規表現で書き表すと

.*
.?

になります。

正規表現

. = 何でもよい一文字
* = 繰り返し回数。この場合は0回以上
? = 繰り返し回数。この場合は0回か1回

メタ文字(特殊文字)について

本来の文字でなくて、正規表現として使う文字のことを言います。
じゃぁ、本来の文字を表すにはどうすればよいか?というと、その文字の前に「\」を付けます。

\*
\.
\\

最短マッチ

AbcdZ1234Z

A.*Z = AbcdZ1234Z
A.*?Z = AbcdZ

?をつけると、最短マッチになる。

複数行マッチ

.* =改行以外の繰り返し
[\s\S]* =改行を含む繰り返し

※秀丸、sakuraエディターでは、改行を含む複数行マッチは使えないようです。


追記:2018/04/11
Notepad++

Notepad++の場合は、矢印のところをチェックを付けると、「.」が改行も含む文字となって、改行を含む複数行マッチに使えます。

<div>.*?</div> 等で試してみればわかるかと思う。

検索 その1

.:なんでもよい1文字

^ $ :行の先頭と最後

* + ? :繰り返し回数

* = 0回以上
+ = 1回以上
? = 0回か1回

直前の文字との組み合わせです。
A* なら Aが0回以上という意味ですね
.* なら 何でもよい文字が0回以上 (ワイルドカードと同じ意味)
.? なら 何でもよい文字が0回か1回

検索 その2

[] :カッコ内の文字のどれか

[0123456789] なら、数字1文字という意味です
[0123456789]* なら数字が0回以上

{} :繰り返し回数

[0123456789] {3} なら3ケタの数字

検索 その3

( ) :グループ化

(AB)* なら、ABというものが0回以上です

| :どちらか (OR)

(AB|12) なら、ABか12のどちらか

^ :それ以外 (NOT)

[^0123456789] なら 数字以外 []内で使用すると行頭という意味ではない

- :範囲

[0-9] なら 0から9
文字コードの順番なのに注意

置換

()でくくったマッチした文字列は、前から順番に、\1,\2($1、$2)のような感じであらわされる
これを利用して、置換できると便利だと思います。

秀丸,サクラエディター

検索:([0-9]{4})_([0-9]{2})_archive\.html
置換:archive/\1/\2/

/2012_04_archive.html ->/archive/2012/04/

※正規表現にチェックをしてくださいね

Notepad++

検索:([0-9]{4})_([0-9]{2})_archive\.html
置換:archive/$1/$2/

Search Regex

検索:|([0-9]{4})_([0-9]{2})_archive\.html|
置換:archive/$1/$2/
$1、$2のような感じになります

その他

\n :改行コード
\t :タブ
\s :空白1文字
\S :空白以外1文字
. :改行以外の1文字




最後に

テキストの置換・変換には強力なツール?です。
分かる部分だけ、使える部分だけでも使用すると、かなり便利だと思います。

秀丸エディター -vector
サクラエディタ
Notepad++

秀丸、サクラエディター、Notepad++で、GUIで使えますから、使用したことがない人もどうぞ!! Notepad++、サクラエディタの方はフリーソフトです。

スポンサーリンク