正規表現を使った検索や置換に関しての記事は良く見かけますが、
「正規表現って何?」と思ったので正規表現自体の説明を読みました。
しかし説明を読んでも「???」状態なので、自分が理解しやすいようにまとめた備忘録です。
正規表現とは?
- 文字列の集合を一つの文字列で表現する方法。1
意味が解りづらいため、解りやすいに以下に言い換える。
- 様々な文字列を一つの文字列で表現する表記法。
文字列とは?
文字の集合のこと。
文字を並べたもの。
以下は文字列。
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
コマンドで検索をしてみる。
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$
という一つの文字列で表現できたので
一回の検索で全ての行数を出力させることができた。
そのため正規表現を検索や置換に使用すると便利。
#終わり
なんとなく解ったような解らないような。。。
小学生に「正規表現って何?」と聞かれても自分はうまく説明できる自信がありません。
何故、正規表現を検索や置換に使うと便利なのか理解できたので良しとします。