2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2015.10.28
開発環境・ツール意外と使う正規表現
こんにちは、Gです。
今回は個人的に意外と使う、正規表現のよく使うコマンドについてご紹介します。
仕事で聞く、話す、考える以外の時間は、ものすごく単純に言ってしまえばテキスト文章を相手に
書く、探す、編集する作業を行っているわけで、そこを省力化できると意外と効果は大きいです。
ローカルファイルとしてプールしてる大量のソースやメモ書きテキストから必要な情報を抜き出す、
もしくはソースから特定パターンの文言で置き換えることは作業の上でよくあるとだと思いますが、
正規表現を上手く使いこなせるとだいぶ楽ができます。
まずは導入編のご紹介
例えば、特定の文言Aと文言Bに囲まれた文字を抜き出すというパターンは多いと思います。
例として、「<」と「>」に囲まれた文言を抜き出したい場合はこんな感じで。
<.*?> →間に0文字以上の文字があるパターン(最短一致) <.*> →間に0文字以上の文字があるパターン(最長一致) <.+?> →間に1文字以上の文字があるパターン(最短一致) <[A-Z]*?> →間にA~Zの文字があるパターン(最短一致) <[^A-Z]*?> →間にA~Z以外の文字があるパターン(最短一致)
実際に以下の文字列を検索してみると、動きが解ると思います。
<>
<1>
<<<A>>>
<><1><<<A>>>
<<<
A
>>>
なお、一般的なエディタだと複数行にまたがる文字列を正規表現検索の対象にすることはできないことが
多いですが、一部のフリーソフト、GREPツールでは複数行検索もサポートしています。
ここでは紹介しませんが、込み入った検索条件を使用したい場合は探してみてください。
なお、正規表現で使われる「[」等の記号を検索対象にしたい場合は、前に「\」を付けます。
\[.+\] →間に1文字以上の文字があるパターン(最長一致) \[\d+?\] →間に1文字以上の数字(10進数)があるパターン(最短一致) \[[\s|\d]+\] →間に空白類文字または数字があるパターン(最長一致) \[[^\w]+\] →間に英数字([0-9A-Za-z_]と同じ意味)以外の文字があるパターン(最長一致)
実際に以下の文字列を検索してみると、動きが解ると思います。
[1][2] [a][b] [,][%] [ ]
更に込み入った検索だと、こういうこともできます。
(\[[^\s]+\]){3}?
→()で囲まれた条件が3回繰り返されたパターン
実際に以下の文字列を検索してみると、動きが解ると思います。
[1][2] [3][4][5] [6][7]
また、上の検索例で「\s」「\d」などを使っていますが、他にも特定の文字種や位置を
表す記号として以下の様な文字も使用できます。
\t →タブ \r →ラインフィード(LF) \n →キャリッジリターン(CR) ^ →行頭 $ →行末
次に置換について。
検索例の中に円カッコ「()」で囲っている例があると思います。
これを拡張式集合といい、このカッコで囲まれた部分の中身、條件に一致する文字列は
置換時に参照できます。
※正規表現置き換え例
1.検索文字列
(\w\s)test(\s+)
2.置き換え文字列
\2TEST\1
実際に以下の文字列を置換してみると、動きが解ると思います。
t test a b;
T TEST A B;
他にも細かいテクニックは無数にありますが、導入編としてはこんなものでしょう。
ここからは、普段正規表現を使っている方が、もっとマニアックに引っかける書式を紹介します。
■先読み/後読み
(?=正規表現)/(?<=正規表現) 条件一致させる場所に前提条件をつけられます。アンカーとして機能します。
これを応用すれば以下のような検索が簡単にできます。
<img width="80" height="70" src="システム開発.gif" />
といった、横80 かつ 縦70の画像をマッチさせるにはどうすればいいでしょう?
HTMLコーディングをされている方ならよくあるシチュエーションだと思います。
ORなら、img.*(height=”70″|width=”80″)でいいかもしれませんが、片方だけでもマッチしてしまいます。
img(?=.*width="80")(?=.*height="70")
これでマッチします。
attributeが2つだけなら、まだ強引に正規表現を書くことはできますが、
3つ以上になってきたときに効果を発揮します。
他にも知っておくと便利な構文がたくさんありますが、また次回ご紹介させていただきます。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索