正規表現メモ

2019年11月2日

実は、正規表現ってあまり使ってませんでした。

強いて言えば、エディタで改行を置換したりするぐらいでした。

文字列をいじったりする時は、Excelでやるとか、簡単なプログラムを組むとか。

最近は「簡単な処理はPythonでやってしまおう!」みたいな感じの方もいますが、数千件のデータを扱う訳ではないし、そこまで……ってものは正規表現で良いかなと。

 

苦手なものを減らしたいってのもありますね。

 

以下は正規表現の覚書です。

直接文字で検索する(正規表現ではない)をリテラル、
正規表現で検索するやりかたは「メタ文字」と呼ぶ。

「.」 = 改行を除く任意の1文字
「\d」 = 数値
「\w」 = 文字
「\n」 = スペース、改行、タブ

「?」 = 0または1文字 = {0,1}
「+」 = 1文字以上の繰り返し = {1,}
「*」 = 0文字以上の繰り返し = {0,}
「^」(キャレットorハット) = 行の先頭
「$」 = 行の末尾
「\b」 = 単語の境界

 ※よく使うパターン
 .+ = 任意の文字の1文字以上の連続

量指定子

{n} = n個
{min,max} = min以上、max以下
{min,} = min以上

ex:3~6文字の数字
\d{3,6}

選択子

「|」(パイプ)→ 「abc|123」 = abc 又は 123

ex:「example.com」と「example.net」を選択
example.com
example.net
  ↓
example.com|example.net
  又は
example.(com|net)

文字クラス

・[](大括弧)の中のどれか1文字
[abc] = a or b or c

・「^」で否定([の直後のみ)
[^cb] = c もしくは b 以外

・ 範囲指定
「-」で範囲を指定できる(文字コード順)
ex:
[A-F]

・文字クラス内でのエスケープ処理
 次の文字はエスケープの必要がある

^, -, \ , ]

.(ドット)はエスケープの必要なし
^(キャレット)は先頭以外であればエスケープの必要無し

タブ、改行

 「\t」= タブ
 「\r\n」 = 改行(Windows)
 「\r」 = 改行(v9までのMacOS)
 「\n」 = 改行(Unix、v10以降のMacOS)
 「\r\n|\r|\n」ですべての開業に対応できる

ex:Windowsで連続改行を置換する場合
(\r\n)+
 ↓
\r\n

 

キャプチャ

()で括ると$1,$2……として変数のように扱える

hoge, http//hogehoge.com
google,http//google.com
exsample, http//exsample.com
  ↓
(.+),\s?(.+)
<a href = “$2">$1</a>
  ↓
<a href = “http//hogehoge.com">hoge</a>
<a href = “http//google.com">google</a>
<a href = “http//exsample.com">exsample</a>

 

後方参照

()でキャプチャした値を「バックスラッシュ+数値」で参照する
3, 8, 5, 4, 4, 5, 1, 1, 5, 3, 3
  ↓
(\d),\s\1
  ↓
3, 8, 5, 4, 4, 5, 1, 1, 5, 3, 3