learning regular expression

92
はじめての正規表現

Upload: taiju-higashi

Post on 13-Jul-2015

842 views

Category:

Technology


5 download

TRANSCRIPT

はじめての正規表現

今回、勉強会を開催するにあたり

次のような事前アンケートを

取りました

「テキスト処理をしている中で、手作業でやるのが面倒な事例を

教えてください。例題としてとりあげるので、

メールかSkypeで受け付けます。」

まずは、そのアンケートについて一通ずつ紹介します

では、気を取り直して基本事項の確認

記号の意味を理解しましょう

.(ピリオド)任意の一文字(改行以外)を表す

これ

*(アスタリスク)直前の文字を0回以上繰り返す

これ

.*(ピリオド&アスタリスク)任意の一文字を0回以上繰り返す

これがワイルドカード文字の*(アスタリスク)に相当します

ワイルドカードの『*』=(イコール)

正規表現の『.*』

あといくつか覚えれば大体おk

¥n(改行)¥t(タブ)^(行頭)$(行末)

(A|B)(AまたはB)

習うより慣れろ!

行頭に「> 」の引用符を挿入したい

HTMLメールに対してテキストメールで返信する時など

引用符(> )が欲しくなる時があります

行頭に引用符を挿入したいそんな時に使えます

検索する文字列『^』

置換する文字列『> 』

半角空白

番組の途中ですが、お知らせです

秀丸エディタにある正規表現機能の使い方を

ご紹介します

メニューバーの「検索」→「置換」をクリックします

正規表現のチェックボックスをオンにします

「初めてだから怖い・・・」という方は痴漢の前に確認しておきましょう

話を元に戻します

検索する文字列『^』

置換する文字列『> 』

半角空白

解説

行頭(^)を引用符(> )に置換したということ

行末の不要な空白を除去したい

Excelなどのファイルから文字列をコピーした時

行末に不要な空白があることがあります

行末の不要な空白を除去したいそんな時に使えます

検索する文字列『 $』

置換する文字列『』

半角空白

解説

行末($)直前の空白を「何もなし」に置換したということ

行末に<br />を挿入したい

HTMLでは改行を<br />と表します

原稿の行末に<br />を挿入したいそんな時に使えます

検索する文字列『$』

置換する文字列『<br />』

解説

行末($)を<br />に置換したということ

バラバラになっている表記ゆれを統一したい

複数人がライティング作業をする時など表記ルールを決めてない限り表記ゆれが絶対おこります

表記ゆれを統一したいそんな時に使えます

検索する文字列『(ウェブ|ウエブ)』

置換する文字列『Web』

解説

ウェブまたは、ウエブをWebに統一したということ

行頭の不要な空白やタブを

除去したい

人からもらったHTMLファイルなど「インデントのタイミングが気持ち悪い」「タブと空白入り交じってやがる!」など、イラっとすることがありますね

すべてのインデントをリセットしたいそんな時に使えます

検索する文字列『^( | |¥t)*』

置換する文字列『』

解説

行頭(^)の半角空白、または全角空白、またはタブ(¥t)が

いくつ出てきたとしても(*)「何もなし」に置換したということ

延々続く文字列を30文字で折り返したい

メールを送る時なんかに30字で改行すると見やすくなりますね

書き終わってから30字に強制改行したいそんな時に使えます

検索する文字列『(..............................)』

置換する文字列『¥1¥n』ピリオド30個

解説

解説の前に、今使った

新しい概念の説明です

検索する文字列『(..............................)』

置換する文字列『¥1¥n』

検索する文字列『(..............................)』

この検索する文字列のように、カッコでグループ化した文字は

置換する文字列『¥1¥n』

後から、¥1という表記で呼び出すことができます

置換する文字列『¥1¥n』

この置換する文字列で言う¥1は『..............................』と同じ意味になります

つまり、置換する文字列『¥1¥n』

は『..............................¥n』

とあらわしていることになります

検索する文字列『(...............)(...............)』

カッコのグループが2つあれば

ピリオド15個

置換する文字列『¥1¥2¥n』

後から、¥1と¥2という表記で別々に呼び出すことができます

解説に戻ります

検索する文字列『(..............................)』

置換する文字列『¥1¥n』

任意の文字(.)が30個続いたら、改行(¥n)を挟むということ

もうちょっと簡潔な表現で

検索する文字列『(.{30})』

置換する文字列『¥1¥n』

と表すことも可能です

<meta>や<img>を<meta />や<img />に

変換したい

HTMLからXHTMLに移行する時空要素の末尾に「 /」が必要です

意外に多くてめんどくさい

空要素の末尾すべてに「 /」を挿入したいそんな時に使えます

検索する文字列『(<(meta|link|br|img|hr|

input).*?)>』

置換する文字列『¥1 />』

よく使う空要素のみ抜粋

解説

解説の前に、今使った

新しい概念の説明です

説明のためにシンプルな記述に変更します

検索する文字列『(<img.*?)>』

置換する文字列『¥1 />』

検索する文字列『(<img.*?)>』

?が今回のポイントです

検索する文字列『(<img.*?)>』

この?がないとどうなるかというと

<p><img src=”example.jpg” alt=”いぐざんぽー”></p>

外側に別の要素があると赤字の範囲がマッチ対象になります

<p><img src=”example.jpg” alt=”いぐざんぽー”></p>

本当はここまでで止めてほしい

検索する文字列『(<img.*?)>』

?を使うと最短距離でマッチしてくれます

『(<img.*)>』

?がなければ最長距離の「>」まで<p><img src=”example.jpg”

alt=”いぐざんぽー”></p>

『(<img.*?)>』

?があれば最短距離の「>」まで<p><img src=”example.jpg”

alt=”いぐざんぽー”></p>

というようにマッチ対象が変わります

解説に戻ります

検索する文字列『(<(meta|link|br|img|hr|

input).*?)>』

置換する文字列『¥1 />』

よく使う空要素のみ抜粋

「<」があって、metaまたは、linkまたは・・・があって

任意の文字がいくつかあって(.*)最短距離の「>」までを

<なんとか />にするということ

相対パスを絶対パスに変更したい

相対パスより絶対パスの方がSEOに効果があるという噂がありますね

相対パスを絶対パスに変更したいそんな時に使えます

検索する文字列『(<a href=")』

置換する文字列『¥1http://www.example.com/』

最後に

にわか正規表現は危険なので慣れないうちは

用法・容量を守って正しくお使いください

がんばって習得しましょう!

お疲れ様でした!