LINEスタンプ制作代行サービス・LINEスタンプの作り方!

お電話でのお問い合わせ:03-6869-8600

stampfactory大百科事典

正規表現

正規表現(せいきひょうげん、)とは、文字列の集合を一つの文字列で表現する方法の一つである。正則表現(せいそくひょうげん)とも呼ばれ、形式言語理論の分野では比較的こちらの訳語の方が使われる。まれに正規式と呼ばれることもある。もともと正規表現は形式言語理論において正規言語を表すための手段として導入された。形式言語理論では、形式言語が正規言語であることと正規表現によって表せることは同値である。その後正規表現はテキストエディタ、ワードプロセッサをはじめとするアプリケーションでパターンマッチ文字列を表すために使用されるようになり、表せるパターンの種類を増やすために本来の正規表現にはないさまざまな記法が新たに付け加えられた。このような拡張された正規表現には正規言語ではない文字列も表せるものも多く、ゆえに正規表現という名前は実態に即していない面もあるが、伝統的に正規表現と呼ばれ続けている。この記事では主にこのような正規表現を用いたパターンマッチについて説明している。以下、誤解のない限り、アプリケーションやプログラミングにおいて正規表現を用いた文字列のパターンマッチを行う機能のことを、単に正規表現という。ほとんどのプログラミング言語では、構文またはライブラリによって正規表現を使うことができるようになっている。構文やライブラリに正規表現を備えたプログラミング言語やユーティリティとして、、、、、などがある。また、プログラミング言語の開発などに用いるも正規表現を使う。それぞれの言語やアプリケーションで細部の仕様が異なっているが、やにより標準規格も定められ、それらに準拠するものも増えてきてはいる。理論的に明解であり扱いも容易であるため、形式的な説明を先に述べる。アルファベット "A" = {"a"...,"a"} 上の正規表現は次のように定義される。正規表現の表す集合が、その正規表現の表す言語である。正規表現の定義に、次の項目を含めることもある:正規表現 ε の表す集合は正規表現 ∅* の表す集合に等しいので、ε を正規表現の定義に含めなくても ∅* で代用できる。"X"|"Y" の代わりに "X"+"Y" と書くことや、"XY" の代わりに "X"·"Y" と書くこともある。また、「|」や「*」の優先順位を明確にするために括弧を使うこともある。以下ではもっぱらよく使われているライブラリやツール等の実用的な観点から説明する。例えば、「Handel」、「Hendel」、「Haendel」 という三つの文字列を含む集合は 「H(e|ae?)ndel」 というパターンで表現できる(あるいは、パターンは個々の三つの文字列にマッチすると言われる)。ほとんどの形式では、もし特定の集合にマッチする何らかの正規表現が存在すれば、無限の数のそのような表現がある。ほとんどの形式では正規表現を構築するのに次の演算子を提供している。これらの構文は任意の複雑な表現を形成するために組み合わされて使用される。正規表現の起源は、いずれも理論計算機科学の一分野であるオートマトン理論や形式言語理論にみることができる。これらは計算のモデル化(オートマトン)や形式言語の分類方法などを扱う学術分野である。数学者のスティーヴン・クリーネは1950年代に正規集合と呼ばれる独自の数学的表記法を用い、これらの分野のモデルを記述した。ケン・トンプソンはテキストファイル中のパターンにマッチさせる手段として、この表記法をエディタQEDに導入した。彼はこの機能をのエディタにも追加し、後に一般的な検索ツールであるgrepの正規表現へと受け継がれていった。これ以降、トンプソンの正規表現の適用にならい、多くのUNIX系のツールがこの方法を採用した(例えば 、、、、、 など)。との正規表現はヘンリー・スペンサーによって書かれたものから派生している(Perlは後にスペンサーの正規表現を拡張し、多くの機能を追加した)。フィリップ・ヘーゼルはの正規表現とほぼ互換のものを実装する試みとして (PCRE) を開発した。これはやなどといった新しいツールで使用されている。Perl 6では、正規表現の機能を改善してその適用範囲や能力を高め、を定義できるようにする努力がなされた。この結果として、 6文法の定義だけでなくプログラマのツールとしても使用できる、と呼ばれる小言語が生み出された。これらの規則は正規表現の機能のすべてを保持しながら、副規則を通して再帰下降構文解析のバッカス・ナウア記法の定義を行うことができる。構造化情報標準における、文書やデータベースのモデル化に対する正規表現の使用は重要である。これは1960年代に始まり、ISO SGMLのような産業標準が確立された1980年代に拡大した。構造規定言語の標準の中核は正規表現である。より単純かつ明白な例としては、DTD要素グループの構文において正規表現が使われている。UNIXの標準であるPOSIXでは、「simple regular expressions」「basic regular expression (BRE)」「extended regular expression (ERE)」の3種類の記法が示されている。このうち、「simple regular expressions」は「歴史的()」また「レガシー()」と書かれており、後方互換性を提供するものとされ、標準の将来の版では廃止され得る(may be withdrawn)と注意されている。simple regular expressionsの仕様は「codice_1」のマニュアルページとして示されている。基本正規表現とも。ほとんどの正規表現を利用する UNIXのユーティリティ(grepやsed)のデフォルトはこれである。この文法では、ほとんどの文字はリテラル(機能を意味せず書かれたそのまま)に扱われる。つまり、ある文字はその文字にのみマッチする。例えば、正規表現「codice_2」は文字「codice_2」にマッチし、正規表現「codice_4」は文字列「codice_4」にマッチするなど。例外はメタ文字と呼ばれる。特定の正規表現の実装では、一部のメタ文字の前のバックスラッシュを異なって解釈する。例えば egrep や Perl は、バックスラッシュの付いていない括弧や縦棒「codice_6」をメタ文字と解釈し、バックスラッシュの付いているものをリテラルに解釈する。古いバージョンの grepは選言演算子「codice_6」をサポートしていない。例符号点の範囲によってたとえば「アルファベット大文字」などを表現しようとすることは、時に問題をひきおこす。たとえばロケールに依存する例として、エストニア語のアルファベット順では、文字「s」の後に「z」があり、その後は「t」、「u」、「v」、「w」、「x」、「y」と続くので、正規表現「codice_24」ではすべて言語のすべてのアルファベット小文字のにマッチするわけではない。そのため、 標準では次の表に示されているクラス、つまり文字の区分を定義している。例:正規表現「codice_25」は英語の大文字「codice_26」~「codice_27」と「codice_2」と「codice_29」のうち一文字のみにマッチする。いくつかのツールで使用できる、 にないクラスとして「codice_30」がある。「codice_30」は通常「codice_32」と[[アンダースコア]]からなる。これらが多くの[[プログラミング言語]]で[[識別子]]として使用できる文字であることを反映している。拡張正規表現とも。より現代的な拡張正規表現は多くの場合、現在の のユーティリティで[[コマンドライン]]オプションに「codice_33」を含めることで使用できる。の拡張正規表現は伝統的な の正規表現に似ているが、いくつかの点で異なっている。例えば、拡張正規表現「codice_34」は文字列「codice_35」や 文字列「codice_36」にマッチする。GNU findコマンドにおけるデフォルトの正規表現文法としても用いられる。(findutils-4.2.28)GNU Emacs Manual - Regexpsはの拡張正規表現さえも上回る豊富な文法を持っている。その例として、POSIXとは異なり、Perlの正規表現には「非欲張り量指定子」がある。標準の「codice_37」は、例えば正規表現「codice_38」の「codice_39」はできるだけ長い文字列にマッチしようとする。このふるまいを「貪欲」という。たとえば文字列「codice_40」にマッチさせると、全体にマッチする。これに対し、では使うことができる正規表現「codice_41」の「codice_42」は、マッチするのであれば、できるだけ短い文字列にマッチする。たとえば文字列「codice_40」に対して「codice_44」にだけマッチする。これを「非欲張り量指定子」と言う。また、Perlには以下の定義済み文字クラスがある。すぐれた機能をもつPerlの拡張正規表現は、多くの[[プログラミング言語]]やソフトウェアで採りいれられている。例えば、[[Java]]のPattern[[クラス (コンピュータ)|クラス]]、[[Python]]、[[Ruby]]などがそうである。しかし、これらがPerlの正規表現と完全に互換である訳ではない。また、[[Perl Compatible Regular Expressions]] (PCRE) と呼ばれる汎用の正規表現ライブラリはアプリケーションに組み込まれ、Perlの正規表現とほぼ互換の機能を提供する。言語処理系やアプリケーションが正規表現をサポートしていない場合にでも、正規表現に必要な処理を提供する正規表現ライブラリを導入することで正規表現を使うことができる。以下にその一例を挙げておく。[[Category:プログラミング]][[Category:構文解析 (プログラミング)]][[Category:コンピュータ言語]]

出典:wikipedia

LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。