2007年05月20日

文字数のチェックの注意事項

 原文に改行が含まれる場合、mオプションが必要なときがあります。perl系の正規表現では必須です。行単位で行数回数のマッチを試みるからです。これは複数行のテキストエリアの入力の場合に、注意が必要です。PHPで言うなら、eregの場合は動いてもpreg_matchだと動かない場合があるということです。気をつけましょう。
 例えば、文字数だけの場合'/^.{1,100}$/m'のような感じです。こうすることで、複数行にまたがります。複数テキストボックスからの入力から正規表現を使う場合は注意しましょう。
 英文の場合、単語の途中で改行は一般的にしないで、行単位を基本にした方が、都合が良いのでしょう。

2007年02月14日

拡張子を得る

ファイルネームから、拡張子だけ知りたいときがあります。

ファイルネームが、指定の拡張子かどうか調べるには、

【(\.gif|\.jpg)】のように【|】で区切った拡張子を記入していけばOKです。

また、拡張子を取り出したい場合は、

【\..*】をプログラム上で処理します。PHPの場合は、【ereg("\..*",$filename,$res)】のように使うと、変数$res[0]に拡張子が入ります。ドット以降の文字列を取得するだけの正規表現ですが、ファイルネームに拡張子以外のドットが含まれるといったことが無ければ、これで大丈夫です。ファイルネームが、ディレクトリなどを含む場合は、basename($filename)としておけば純粋にファイル部分だけが取り出せます。

2007年02月11日

正規表現チェッカーが新しくなりました

 正規表現チェッカーは、正規表現を学習、利用、チェックする為のツールです。

 正規表現をプログラミングなどで使う場合、作成中のプログラムで動作確認をしながら正規表現を組み立てるのでは効率が悪いです。このチェッカーは、純粋に正規表現が思うように動作しているかだけを調べられます。

 使い方は簡単です。作成した正規表現と試しにマッチさせるテキストを入力して、チェックボタンをクリックすてば、マッチするかどうか表示されます。  現在、

が稼動しております。  PHPバージョンは、ereg、mb_ereg、preg_match_allの3つの関数を選択できます。

 正規表現チェッカーに関するお問い合わせ、ご質問、要望、バグ報告などは、ここへコメントしていただければ幸いです。

2007年02月08日

正規表現の範囲は?

 今までは条件に合うかどうかだけをを考えてきました。しかし、正規表現は、長いテキストから、条件に合う部分を抜き出すということもできます。その時に悩むのが、範囲指定です。

 例えば
【東京は晴れです。京都は雨です。】というテキストあるとして、【東京から始まって「。」で終わる一文】を探す場合、【東京*。】とすると、マッチはしますが、内容は【東京は晴れです。京都は雨です。】と最後の「。」まで広く検索します。

 この検索は、最長検索と呼ばれています。つまり、条件に合う一番広い範囲を優先するということです。正規表現では、マッチする、しないだけではなく、その文字を抜き出す、検索するといった作業を伴う場合も多いので、こでは困ります。例えば「”」で囲まれた部分とか、【】で囲まれた部分をチェックしたい場合、長い文章にそれがいくつも存在すれば、最初に出てくる部分から、一番最後の部分を取り込むことになってしま、うまくいきません。そこで、メタキャラクタ【?】を使います。【?】は、0文字もしくは1文字という意味なのですが、【+?】or【*?】のように使うと、検索を最短にします。といっても解りにくいですね。

最初の例の場合、【東京*。*?】などとします。すると、東京から始まって、任意の文字列【*】があって、【。】があって、任意の0文字もしくは1文字(*?)文字列があるとなります。言葉がおかしいのですが、【。】一回出てくれば十分なのですから、最長検索をする必要は無いと判断されるようです。結果として、最短検索になります。

 このように、テキストから、条件に合う部分を抜き出すのをマッチさせると区別して、キャプチャーすると言う場合もあります。

 この記事を書いている現在、正規表現チェッカーでは判断できません。時間を見つけて、正規表現キャプチャーチェッカーも作ろうと思います。

2007年01月23日

正規表現チェッカーとは

 正規表現チェッカーは、正規表現を学習、利用mチェックする動作確認ツールです。作成した正規表現が思うようにマッチするのかどうかを簡単に調べることができます。

 使い方は簡単です。作成した正規表現と試しにマッチさせるテキストを入力して、チェックボタンをクリックすてば、マッチするかどうか表示されます。

 現在、PHPバージョンと、JavaScriptバージョンが稼動しております。

 正規表現チェッカーに関するお問い合わせ、ご質問、要望、バグ報告などは、ここへコメントしていただければ幸いです。

郵便番号にマッチさせる

 郵便番号にマッチする正規表現は
【^[0-9]{3}-[0-9]{4}$】
のようになります。数字が3桁と、ハイフン、そして数字が4桁。比較的簡単ですね。

2007年01月07日

拡張子にマッチさせる

ファイル名の拡張子にマッチさせてみましょう。
例えば、画像ファイル、jpg、gif、bmpのファイルにマッチさせます。

【(\.gif|\.jpg)$】

これは、元のファイル命の最後の部分($)が、指定されたテキストであるかどうかを調べています。実際には、拡張子を【|】で区切って沢山書くことが出来ますし、もちろん画像でなくとも必要な形式に書き換えればよいのです。

2006年11月19日

URLにマッチさせる

ホームページのアドレスとマッチさせる正規表現を考えます。

http://[a-z]?[a-z0-9]*\.[a-z]+[\\\.-_&?=%a-zA-Z]*$

【解説】
 http://で始まり、小英字から始まり、小英数字が並び、ドットを挟んで、小英字でドメインを構成
後半は、URLで使われる記号「\.-_/」とGETなどで使う「&?=%」、更に英数字で構成されることを示してる。

電話番号にマッチさせる

電話番号にマッチさせるのは、ちょっと難しいです。それは、市外局番、市内局番を分けるハイフンの位置が異なるからです。

携帯番号にマッチ

^0[1-9]0-[0-9]{4}-[0-9]{4}$

【解説】0数字0で始まり、ハイフン、数字4桁、ハイフン、数字4桁で終わる形です。

一般回線にマッチ
ハイフンがない形式なら簡単です。

^0[0-9]{9}$

【解説】
0で始まって、9桁の数字が続く

ハイフンが必要

^0[0-9]{1,4}-[0-9]{1,4}-[0-9]{4}$

【解説】
0から始まり、4桁以内の数字の後にハイフン、その後に1~4桁の数字、ハイフン、4桁の数字となります。しかしながら、この場合、2桁-1桁-4桁でもマッチしてしまいます。実際に使うときには、上記の表現と、{12}(全部で12文字)と2種類ともマッチさせて使うのが良いかと思います。

メールアドレスにマッチさせる

さて、ここからは、実際に正規表現を組み立てます。

一回目は、メールアドレスにマッチさせましょう。

^[a-zA-Z].*@[\.-_a-zA-Z0-9].+\.[a-zA-Z]+$

こんな感じにしてみました。開設すると、
アルファベットで始まり、任意の文字が続き、@が挟まって、その右に英数字と「.-_」の記号の羅列が1文字以上あり、「.」があり、任意のアルファベットで終わるということですね。

2006年11月18日

正規表現は使い道

 正規表現で、一番多く使われる方法は、ユーザーが入力した情報が、正しい形式かどうかを調べるときだと思います。例えば、電話番号や、メールアドレスを入力するとき、正規表現でマッチさせて、マッチしない場合、「そのメールアドレスは間違っています」などと警告を出すときです。ここからは、私の独断と偏見で作った、使えそうな正規表現の記入例を書いていきます。

2006年10月23日

正規表現をなんに使う?

 ここまで、正規表現について説明してきました。紹介したメタキャラクタなどは、ほんの一部ですし、実施には、複数のメタキャラクタを組み合わせて、利用することが大半です。

このページは、記号の羅列に見える正規表現が、どんな働きをしているのかを実感していただければ、それで満足です。ここまで、読み進められた方は、他の難しいページにたどり着いても、その意味が解る程度の基礎知識を身につけていると思います。

 また、現在、動作確認が完璧でない正規表現チェッカーですが、不具合があります。
このスクリプトは、テキストボックスから、テキストを受け取り、そのままif(ereg)で判断しているだけです。エスケープ文字などで不具合があるようです。
 希望があれば、直しますが、私はプログラマーではないので、うまく出来るかどうかわかりません。また、利用する言語により、独自の表現方法が存在するため、詳しい方は、ご自分の環境下で、自作するのが良いかと思います。その際は、無事に動くツールとして、掲載しますので、連絡していただければ幸いです。

メタキャラクタ その4 位置の指定

 次に、簡単な例を出してみます。
条件【a】文字列【abc】=【マッチします。】

この場合、他にどのような文字列がマッチすると思いますか?
実は、【bba】【bac】など、文字列の長さにも、「a」の条件がある場所も関係なく、「a」がどこかにあれば、全てマッチします。

しかしながら、場合によっては、文字列の先頭が「a」のときだけマッチさせたい場合が出てきます。その場合の、正規表現を説明します。

【^a】【abc】=マッチします。
この【^】は、文字列の先頭を対称にするという意味を持ちます。ですので、この場合、【baa】ではマッチしなくなります。

 なお、先頭ではなく最後を示す場合は、【$】を使います。

メタキャラクタ その3 複数条件

 ここでは、条件を複数指定したい場合を考えます。

例えば、条件Aと条件Bのどちらかの条件に合えば、マッチする。
という場合です。一番簡単な表現で考えましょう。

【|】を使う
【|】は、条件を複数指定するためのメタキャラクタです。次のように使います。
【abc|あいう】【あいう】=【マッチします。】
この条件の場合、【abc】か、【あいう】の文字列のどちらかが、もしくは両方が存在すればマッチすることになります。
もう少し例を挙げると、【abcあいう】【あいうえお】【abcdefg】はマッチしますが、【abあい】はマッチしません。

さらに【|】を使う
【|】は、なにも2つだけの条件ではなく、【あいう|abc|123】など必要なだけ指定することが出来ます。

メタキャラクタ その2 文字数指定

 先ほど、【.】は、一文字の伏字のようなものと書きました。
しかしながら、一文字ではなく、文字数を指定して使うことが出来ます。

その方法は、【*】や【+】【{}】を組み合わせて使います。

それでは、ひとつづつ例をあげながら説明します。

【*】を使う。

【a.*c】【abbbbbbbbbc】=【マッチします】
【*】は、0文字以上の任意の文字を指定します。0でもよいということは、【ac】もマッチします。しかしながら、【ca】はマッチしません。


【+】を使う。
 上記の例の【.*】を【.+】にします。この場合は、1文字以上になりますので、【ac】はマッチしません。

【?】を使う
 上記の例の【.*】を【.?】にします。この場合は、0文字か、1文字なので、【ac】や【abc】はマッチしますが、【abbc】はマッチしません

【{}】を使う
 文字数を、明確に指定することが出来ます。
【a.{5}c】【a12345c】=【マッチします】
これは、aとcの間に、5文字の任意の文字があればマッチするものです。この例では、【aあいうえおc】はマッチしますが、【ac】や【aあいうえおかc】はマッチしません。

さらに【{}】を使う
 先ほどの文字数指定の方法として、○文字以上、○文字以下という文字数の範囲を指定することも出来ます。
【a.{5,10}c】【a123456789c】=【マッチします】
 この例では、aとcの間に、5文字以上、10文字以内の任意の文字があるときにマッチします。つまり、【aあいうえおc】も、【aあいうえおかきくけこc】もマッチします。

メタキャラクタ その1 基本

正規表現は、メタキャラクタと言う指定された文字を使うと、より複雑な条件指定が出来ます。その中で、良く使われる基本的なものについて述べたいと思います。例を挙げながら説明していきますが、ただ読むだけでなく、正規表現チェッカーで、実際に確かめ、時には例題を自分で書き換えて、アレンジしながら、読み進めると解りやすいと思います。

メタキャラクタ「.」ドット

【.】(ドット)は、任意の1文字であることを指定します。つまり、何でも良いわけです。
日本語的には、一種の伏字だと思ってください。

例(すみません、こんな例で・・・)
【.bc】【abc】=【マッチします】
・・・他にも【bbc】【cbc】はマッチしますが【ac】はマッチしません

【.ックス】【サックス】=【マッチします】
・・・他にも【シックス】【ソックス】【マックス】【エックス】などがマッチしますが、【マンクス】【ランクス】はマッチしません

注意事項
メタキャラクタ【.】ドットは、任意の一文字なのですが、例題の用に先頭、もしくは最後の一文字として使う場合は、一文字でなくてもマッチします。それは、正規表現が、「等しい」ではなく「含まれる」と言う基準で判断するからです。このように慣れていないと見落としてしまう落とし穴が沢山あるので、実際に使うときは、リファレンスに頼らず、実際に試してみる必要がありそうです。

正規表現を試す

 正規表現の文献を読んでも、どうも理解できない。実感できないと言うのが私の感想です。
実感の無いものを、プログラムなどで使おうとしても、「ここで使いたい」と思うだけで終わってしまいます。それは、その方法が正しいのか自信がないからです。そこで、便利ツールを用意しました。

正規表現チェッカーです。

上記リンクを右クリックなどから、新しいブラウザで開きます。ブラウザのウィンドウサイズを小さくしておくと便利です。
使い方は、上のテキストボックスに、正規表現を、下のボックスに、評価したいテキストを入力して、「Check Now!」ボタンをクリックします。すると、テキストボックスの下に、マッチしたか、しなかったかが表示され動作が確認できます。テキストボックスには、テキストが引き続いて表示されているので、そのつど書き換えることで、正規表現を訂正したり、テキストを変更して確認できます。

試しに、先に書いた演習を入力して、答え合わせを行ってください。

※このチェッカーは、英語にまったく無知な筆者が、翻訳プログラムで、和→英変換している部分があります。おかしい場合は、指摘してください。お願いします。

一番簡単な正規表現

ここからは、実際に正規表現を試しながら学びます。

一番簡単な、正規表現の例を示します。
【a】【abcde】=【マッチします】
これは、【abcde】と言う文字列が、【a】と言う条件に合うかどうか調べています。
プログラムなどで、【'a'='abcde'】などと表現すると、False(適合しない)になりますが、正規表現の場合は、【a】と言う文字が含まれているか?と言う判断をします。
 次のような例も確認指定ください。

【x】【abcde】=【マッチしません】
【bc】【abcde】=【マッチします】・・・・含まれていればどこでも良い
【ac】【abcde】=【マッチしません】・・連続していないときは、不適合

この条件の部分には、正規表現メタキャラクタを用いることで、より複雑な条件を指定できるのですが、基本的な考え方は、このようなものです。

次の表現が、マッチするか、しないか、演習だと思って考えてみてください。
【さんが転んだ】【だるまさんが転んだ】=【】
【おはよう】【ございます】=【】
【はい】【わがはいは、ねこである】=【】
【いいえ】【いい絵ですね】=【】

正規表現の言葉

 正規表現を勉強するに当たり、特有の言葉があるので、先に書いておきます。

【マッチする】
 正規表現とは、テキストが条件に会うか調べるための条件式です。条件にあっている場合を「マッチする(True)」と表現し、条件を満たさない場合を、「マッチしない(False)」と呼びます。

【メタキャラクタ】
 条件を指定するときに利用する文字をメタキャラクタと呼びます。
\ . * + ? ^ $ | ( ) { } [ ]
などがありますが、その意味合いは、事項で説明します。

【このサイトでの表現方法】
ここでは、正規表現の例を次のように書くことにします。
【条件】【テキスト】=【マッチする(しない】
この条件と言うのは、いわゆる正規表現のことです。
実際に、プログラムで使うときなどは、
if (ereg(条件,テキスト)){
}else{}
などのように使うことでしょう。
※「ereg」は、PHPで正規表現を使って文字列を調べるための関数

正規表現とは

 正規表現と言うのは、条件を示す「式」であると考えてください。私たちが目にする条件式とは、【=】【<】【>】のようなものだと思います。これらは、数字など、大きさを表現するものですが、正規表現では、数字ではなく、テキストを表現するものです。

数字の表現の例

100と言う数字と50と言う数字を比較しましょう。

【100>50】→はい、その通り(True)
【100<50】→いいえ、ちがいます。(False)

と表現できます。
それでは正規表現の場合は、どのようになるかと言えば、

テキストの表現の例(正規表現)
「あいうえお」と言うテキストを表現します。

「あいうえお」は、「あいうえお」である。
【あいうえお,あいうえお】→はい、含まれています(True)

あいうえおには、「あい」が含まれている
【あいうえお,あい】→はい、含まれています(True)

「あいうえお」は、「かきくけこ」と同じである。
【あいうえお,かきくけこ】→いいえ、違うテキストです(False)

少々、極端な例ですが、これが正規表現の目的です。
調べたい文字列に対して、指定された条件に適合しているかを調べる為に使われるものです。
正規表現は、その条件を指定するための表現方法なのです。

         

正規表現チェッカー

regular expression checker
JavaScript version

regular expression

matching text

res

Powered by
Movable Type 3.35