個人的正規表現メモ
なんとなく職場で隣の人に話した内容を。
正規表現使うならgrepではなくegrepを
基本正規表現と拡張正規表現と大きく分けて2種類あるけれども、
処理系によって微妙に違うのであまり覚える必要はない。
ただ、多くのプログラミング言語で使用する場合は拡張正規表現のはずなので、
egrepを使用したほうが良い。
詳しくはman grepで。
Unicodeブロックが使えるなら使ったほうが良い
アルファベットのみを正規表現でヒットさせる場合、通常[a-zA-Z]と記載してしまうが、
[:alpha:]とかが使用できるならそちらを使用したほうが良い。
なぜならばアルファベットがaから始まってzで終わるとは限らないから。
国際化を考えているなら絶対に必須。*1
行頭と否定の^は混ざりやすい
行頭は^だけれども、否定も^。否定の場合は[]で囲う。つまりa以外は[^a]。
Javaの正規表現は高速
Javaの正規表現はみんなが思っているほどは遅くはない。遅いのはJavaの正規表現のコンパイル。
Patternクラスを作成するのはものすごく遅いけど、実際のマッチは割と速い。
String#split等は内部で正規表現のコンパイルを行なっているので遅い。
速度を考えるならPatternクラスとMatcherクラスを生で使用すること。
誰得な内容かしらないけれども、なんとなく。
適当に覚えていたことつらつら話しただけなので内容のレベル感がおかしいです。
きちんと学ぶなら以下の本がお勧めです。
- 作者: Jeffrey E.F. Friedl,株式会社ロングテール,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/04/26
- メディア: 大型本
- 購入: 24人 クリック: 754回
- この商品を含むブログ (86件) を見る