正規表現
初心者

正規表現とは?

More than 3 years have passed since last update.

正規表現を使った検索や置換に関しての記事は良く見かけますが、

「正規表現って何?」と思ったので正規表現自体の説明を読みました。

しかし説明を読んでも「???」状態なので、自分が理解しやすいようにまとめた備忘録です。


正規表現とは?



  • 文字列の集合を一つの文字列で表現する方法。1

  • 文字列のパターンを表現する表記法。2

  • 正規表現は、通常の文字 (a ~ z など) と、"メタキャラクタ" という特殊文字から構成される文字列のパターンです。3


意味が解りづらいため、解りやすいに以下に言い換える。


  • 様々な文字列を一つの文字列で表現する表記法。


文字列とは?

文字の集合のこと。

文字を並べたもの。

以下は文字列。

abc

以下も文字列。

apple

以下も文字列。

This is a Pen


様々な文字列

apple

orange
grape
lemon

This is a Pen

This is a Bed
This is a Bat
This is a Bag

※コンピュータ上では空白は文字


様々な文字列を一つの文字列で表現してみる

正規表現を利用すると様々な文字列を一つの文字列で表現できる。

以下の文字列は

apple

orange
grape
lemon

正規表現で表記すると以下の文字列で表現できる。

[a-z]+

以下の文字列は

This is a Pen

This is a Bed
This is a Bat
This is a Bag

正規表現で表記すると以下の文字列で表現できる。

This is a ...

もちろん、より複雑な文字列の表現もできる。

確かに正規表現は様々な文字列を一つの文字列で表現する表記法だった。


様々な文字列を一つの文字列で表現できると何が便利なのか?

文字列の検索や置換が便利になる。

例として以下のファイルをgrepコマンドで検索をしてみる。


fruits.txt

strawberry

apricot
persimmon
kumquat
cherry
pomegranate
watermelon
plum
pear
pineapple
banana
loquat
grape
mandarin
peach
apple
mango
lime
lemon
blueberry


lemonという文字列が何行目にあるか検索する

この場合は単純にlemonという文字列を入力すれば良い。


コマンド

grep "lemon" fruits.txt -n

19:lemon #出力結果。19行目にある。


行末がnの文字列が何行目にあるか検索する

このファイルには行末がnの文字列が以下の4つ存在する。

persimmon

watermelon
mandarin
lemon

それぞれの文字列を入力すれば検索できるが時間がかかるし面倒。


コマンド

grep "persimmon" fruits.txt -n

3:persimmon #出力結果

grep "watermelon" fruits.txt -n
7:watermelon #出力結果

grep "mandarin" fruits.txt -n
14:mandarin #出力結果

grep "lemon" fruits.txt -n
19:lemon #出力結果



正規表現を使って行末がnの文字列が何行目にあるか検索する

そこで正規表現を使う。

正規表現だと行末がnの文字列は以下の表記で表現できる。

n$

これを入力して検索してみる。


コマンド

grep "n$" fruits.txt -n

# 出力結果
3:persimmon
7:watermelon
14:mandarin
19:lemon


正規表現を使って行末がnの4つの文字列をn$という一つの文字列で表現できたので

一回の検索で全ての行数を出力させることができた。

そのため正規表現を検索や置換に使用すると便利。


終わり

なんとなく解ったような解らないような。。。

小学生に「正規表現って何?」と聞かれても自分はうまく説明できる自信がありません。

何故、正規表現を検索や置換に使うと便利なのか理解できたので良しとします。