Help us understand the problem. What is going on with this article?

正規表現とは?

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$という一つの文字列で表現できたので
一回の検索で全ての行数を出力させることができた。
そのため正規表現を検索や置換に使用すると便利。

終わり

なんとなく解ったような解らないような。。。
小学生に「正規表現って何?」と聞かれても自分はうまく説明できる自信がありません。
何故、正規表現を検索や置換に使うと便利なのか理解できたので良しとします。

soarflat
フロントエンドエンジニア🐶
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした