個人的正規表現メモ

なんとなく職場で隣の人に話した内容を。

正規表現使うならgrepではなくegrepを

基本正規表現拡張正規表現と大きく分けて2種類あるけれども、
処理系によって微妙に違うのであまり覚える必要はない。

ただ、多くのプログラミング言語で使用する場合は拡張正規表現のはずなので、
egrepを使用したほうが良い。

詳しくはman grepで。

Unicodeブロックが使えるなら使ったほうが良い

アルファベットのみを正規表現でヒットさせる場合、通常[a-zA-Z]と記載してしまうが、
[:alpha:]とかが使用できるならそちらを使用したほうが良い。
なぜならばアルファベットがaから始まってzで終わるとは限らないから。
国際化を考えているなら絶対に必須。*1

行頭と否定の^は混ざりやすい

行頭は^だけれども、否定も^。否定の場合は[]で囲う。つまりa以外は[^a]。

正規表現だけで処理をしないほうが良い場合もある

そもそも正規表現は可読性が低いし、入れ子を表現できないので、
正規表現を書くことが目的でないならある程度以上はそれ以外の助けを借りたほうが良い。

Java正規表現は高速

Java正規表現はみんなが思っているほどは遅くはない。遅いのはJava正規表現コンパイル
Patternクラスを作成するのはものすごく遅いけど、実際のマッチは割と速い。
String#split等は内部で正規表現コンパイルを行なっているので遅い。
速度を考えるならPatternクラスとMatcherクラスを生で使用すること。

誰得な内容かしらないけれども、なんとなく。

適当に覚えていたことつらつら話しただけなので内容のレベル感がおかしいです。
きちんと学ぶなら以下の本がお勧めです。

詳説 正規表現 第3版

詳説 正規表現 第3版