今日から始める正規表現
2022/11/11
こんにちは!米岡です。
今日は正規表現について書いていきたいと思います!
正規表現とは?
いつものごとく検索してみると
文字列の集合(パターン)を表す汎用的な記法
という難しい表現が出ます。
なんと言っていいか難しいのですが、文字列を検索する際のパターンのことを言います。
例えば膨大な文章から携帯電話番号を抽出したいとき
090-1234-5678、090-9876-5432など当然色々な番号があるので、検索して抽出なんて不可能だと思いますよね。
これを可能にするのが正規表現です。
僕が習った頃は正規表現を極めるだけで飯が食えると言われてたほど奥が深いものになっています!
簡単な正規表現
全ての数字・・・[0-9]
なんとなくイメージが出来ますね、0から9という意味です。
全てのアルファベット・・・[a-zA-Z]
こちらもイメージしやすいですが、aからzの大文字と小文字両方という意味です。
組み合わせて[a-zA-Z0-9]と書くと全ての数字かアルファベットという意味になります。
他にも基本的なルールとして、このようなものがあります。(一部抜粋)
文 字 | 説 明 |
. | 任意の1文字 にマッチします。 |
+ | 直前の文字が 1回以上 繰り返す場合にマッチします。 最長一致。条件に合う最長の部分に一致します。 |
* | 直前の文字が 0回以上 繰り返す場合にマッチします。 最長一致。条件に合う最長の部分に一致します。 |
? | 直前の文字が 0個か1個 の場合にマッチします。 最長一致。条件に合う最長の部分に一致します。 |
+? |
直前の文字が 1回以上 繰り返す場合にマッチします。 |
*? | 直前の文字が 0回以上 繰り返す場合にマッチします。 最短一致。条件に合う最短の部分に一致します。 |
?? | 直前の文字が 0個か1個 の場合にマッチします。 最短一致。条件に合う最短の部分に一致します。 |
| | いずれかの条件 (OR条件) として使われます。 |
\ | 直後の正規表現記号を エスケープ します。 |
[...] |
角括弧に含まれるいずれか1文字にマッチします。 |
[^...] | 角括弧に含まれる文字以外にマッチします。 |
(...) |
文字を1つのグループにまとめることができます。 |
{n} | 直前の文字の桁数を指定できます。 |
{n,} | 直前の文字の最小桁数のみ指定できます。 |
{n,m} |
直前の文字の最小桁数と最大桁数を指定できます。 |
{n,m}? |
直前の文字の最小桁数と最大桁数を指定できます。 |
実際にやってみる
説明読んでても訳が分からないと思うので実際にやってみようと思います。
今回は携帯電話番号の探し方です。
携帯電話番号
携帯電話番号は必ず数字3桁-数字4桁-数字4桁という形をしています。
もっと厳密にするには最初の数字3桁はある程度決まっています(090、080、070など)が難しくなってしまうので今回は数字3桁として行います。
これを正規表現で書くと
[0-9]{3}-[0-9]{4}-[0-9]{4}
となります。
[0-9]は数字、{3}は直前の桁数、間に-(ハイフン)が必ず入る
検索してみると
このようにランダムな文字列の中から携帯番号のみハイライトされているのが分かると思います。
まとめ
今回は正規表現についてご紹介させていただきました。
本当に触りの触りしか書いてないですが、正規表現というものを知るきっかけになれば幸いです。
データ抽出以外にもたまに使用することがあり、例えば似たようなプログラムを作る際の
一斉置換を行う場合にかなり飛躍的に作業効率が上がったりします。
一斉置換したいのに微妙に表現が違うというときに、上手く正規表現を書いてあげればカバー出来るので
そんなときにも使ってみてください。
ではまた!
----------------------------------------------------------------------
株式会社AQUARIZE
〒531-0072
大阪市北区豊崎3-6-8 TOビル404
電話番号 : 06-7777-2927
----------------------------------------------------------------------