SQLネタをいろいろと書いておりますが、ちょっとワンポイント的なネタで正規表現について書きたいと思います。
平均的なものは知っているつもりでしたが、シェルの正規表現について知らなかったのでちょっとメモリます。
通常の正規表現とシェルの正規表現の違いに関して
シェル | 通常の正規表現 | 意味 |
---|---|---|
? | . | 任意の一文字 |
* | .* | 0文字以上の任意の一文字 |
[abc] | [abc] | abcのいずれか |
grep中の正規表現に関して
例えばシェルのコマンドで
1 |
ls -l | grep 'hoge.txt' |
と入力すると、hoge.txtだけではなく、hogeetxtというファイルまで引っかかってしまいます。
これは.(ドット)が任意の1文字を表すからです。
もし完全にhoge.txtだけを取り出したい場合には
1 |
ls -l | grep 'hoge\.txt' |
のようにエスケープ文字を入れる必要があります。
また
1 |
ls -l | grep 'hoge' |
と検索すると当然hoge2 hogehogeも引っかかってしまいますのでこの場合もhogeにピッタリマッチするものを取得する場合は
1 |
ls -l | grep 'hoge$' |
と入力します。
その他
1 |
ls -l | grep 'h[ou]ge\.txt' |
と入力すればhoge.txtとhuge.txtが合致します。
他にもhoge.txtとfoo.txtを取得したい場合は下記のように書きます。
1 |
ls -l | grep -E 'hoge\.txt| foo\txt.' |
または
1 |
ls -l | grep -E '(hoge|foo)\.txt' |
でもよいです。
シェルのgrep検索には-Eオプションをつけることど拡張正規表現を使うことができます。
通常でも正規表現を使えるので、大きい違いはありませんが、
- 通常型は(){}を使用する場合に\を入れなくてはいけない。拡張型は入れなくてよい
- 拡張型は+?|などを使うことができる
など微妙な差異があります。
使えるツール
対象となる正規表現をハイライトしてくれます。
スクレイピングとかやってるときに知りたかった・・