LoginSignup
1
3

More than 3 years have passed since last update.

文系出身エンジニアが学ぶ正規表現の基本

Last updated at Posted at 2019-10-14

記事を書く背景

最近さくらエディタを使ってファイルの編集をすることが多く、その際に正規表現を使って検索や置換を素早く行えるようにするため正規表現を勉強し直そうと思ったのがきっかけ。

対象者

・正規表現って言葉は知っているが、毎回コピペで正規表現を使っている人(自分で正規表現が書けない人)
・正規表現について学び直したい人

正規表現を試せるサイト

まず、簡単に正規表現を試せるサイトを紹介。
https://rubular.com/

下記のように、「Your regular expression:」に正規表現を打ち、「Your test string:」に自分が試したい文字列を打つことで、正規表現が自分の試したい文字列にマッチしているか簡単に知ることができる。
スクリーンショット 2019-10-14 1.51.42.png

文字の表現

■「.(ドット)」
任意の1文字を表す。
「.」に入るのは改行以外(漢字・アルファベット・数字など)の文字なんでもOK!
2文字は「..」、3文字は「...」のように表したい文字列の数だけドットを書いて表現する。

⑴ .が降っている
⑵ ....を食べたい

【マッチする例】
が降っている
ラーメンを食べたい

■「\w」、「\W」
「\w」・・・アルファベット数字アンダスコア( _ )のどれかの1文字
「\W」・・・アルファベット、数字、アンダスコア( _ )以外の1文字

⑴ リンゴを\w個食べた
⑵ \Wが降っている

【マッチする例】
⑴ リンゴを5個食べた、リンゴをX個食べた
が降っている

■「\d」、「\D」
「\d」・・・数字1文字
「\D」・・・数字以外の1文字(漢字・アルファベットなど)

⑴ リンゴを\d個食べた
⑵ \Dが降っている

【マッチする例】
⑴ リンゴを5個食べた
が降っている

条件を使った文字の表現

※複数一致する場合は後方一致(後方一致の例は後述)

■「[](半角の角括弧)」(使い方[abc])
カッコ内に指定した文字のうち、いずれかの一文字

⑴ [abc]
⑵ [リンゴ]を2個食べた

【マッチする例】
a
⑵ リンを2個食べた
※後方一致のためだけがマッチする

■「|」(使い方:A|B)
AまたはBに一致する文字列
※AとBは文字列なので、1文字以上の文字を入れることが可能
※「|」の間は半角スペースを開けない

(リンゴ|モモ)を2個食べた

【マッチするもの】
リンゴを2個食べた
モモを2個食べた

■「[ - ]」(使い方:[a-z])
[]内のハイフンは、文字の文字コード上の範囲を指定
※後方一致
[a-z]・・・小文字のaからzまでの全てのアルファベット
[0-9]・・・0から9までの全ての数宇(\dと同義)

[a-z]を2個食べた

【マッチする例】
fを2個食べた
⑵ eggを2個食べた
※後方一致のためgだけがマッチする

■「[^](ハット)」(使い方:[^a])
[]内のハットは否定を表す。カッコ内で指定した文字以外のいずれかの一文字
※[]の外の「^」は行の先頭を表すため注意(後述)
[^a]・・・「a」以外の全ての一文字
[^abc]・・・「abc」以外の全ての文字列

[^a-z]を2個食べた

【マッチする例】
を2個食べた※[^a-z]は小文字のaからzまでの全てのアルファベット以外の一文字

文字の繰り返し

■「*(アスタリスク)」
0回以上の繰り返し。

 [a-z]*を2個食べた

【マッチする例】
eggを2個食べた
tomatoを2個食べた
⑶ を2個食べた
0回以上なので⑶のように文字列が入っていなくてもOK

■「+(プラス)」
1回以上の繰り返し。

[a-z]+を2個食べた

【マッチする例】
eggを2個食べた
tomatoを2個食べた
1回以上なので「*」⑶のように文字列が入っていない場合はNG

■「?(ハテナ)」
0回か、1回の繰り返し。

 今日はやるぞ〜?。

【マッチするもの】
・今日はやるぞ〜。
・今日はやるぞ。
※ここでは「〜」が0回か、1回の繰り返した文字列

■「{n,m}」
繰り返しの回数の指定。
下記、⑶⑷のように上限、下限を省略することも可能。

⑴ [a-z]{5}を2個食べた   ※5回繰り返す
⑵ [a-z]{1,5}を2個食べた ※1回以上5回以下繰り返す
⑶ [a-z]{,5}を2個食べた  ※5回以下繰り返す
⑷ [a-z]{1,}を2個食べた  ※1回以上繰り返す

【マッチする例】
tomatoを2個食べた
eggを2個食べた、tomatoを2個食べた
tomatoを2個食べた、を2個食べた
eggを2個食べた、cucumberを2個食べた

行頭・行末の指定

■行頭(行の先頭)「^」
行の先頭は「^(ハット)」を使って表す。

^私の.+。

【マッチする例】
私の好きな食べのもはリンゴです。

■行末(行の末尾)「$」
行の末尾は「$」を使って表す。

.+リンゴです。$

【マッチする例】
・私の好きな食べのもはリンゴです。

空白文字の扱いについて(改行、空白、タブなど)

■「\n」、「\r」(改行コード)
改行コードはOSによって複数の種類が存在する。
「\n(LF)」   :Unix系OS全般、Mac OS X
「\r\n(CR+LF)」 :Windows系OS
「\r(CR)」   :古いMac OS(9以前)

なので、「|」を用いて下記のように表すことで上記の改行コードもいずれでもマッチできるようになる。

\n|\r\n|\r

■「\R」
上記\n|\r\n|\rと同義。

■「\t」
タブを表す。

■「\f」
改行ページを表す。

■「\s」、「\S」
「\s」・・・空白文字(半角スペース、\t、\n、\r、\f)すべての文字。( |\t|\n|\r|\f)と同義
「\S」・・・空白文字以外のすべての文字

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3