正規表現とは? 正規表現とは 正規表現(せいきひょうげん)とは、文字列の中に見つかる「パターン」を表現する記述方法です。 この「パターン」を記述することによって、パターンにマッチする複数の文字列(=文字列の集合)を、シンプルに表現することができます。 「パターン」って何・・? 急に「パターン」と言われても、入門者にとっては、なんだか曖昧すぎて、具体的なイメージが湧きにくいかもしれません。 正規表現における「パターン」とは「文字列のなかで、文字の発生のしかたに関する条件(ルール)」のようなものです。 やっぱりまだ、わかりにくいと思いますので、具体例と一緒に見てみましょう。 下記に、いくつかの条件(ルール)の例と、そのルールに当てはまる文字列の例、ついでに、当てはまらない例も列挙しています。 文字列のルール 当てはまる例 当てはまらない例 「東京」で始まる文字列 東京都 東京タワー 東京好き 埼玉県 今日も東京は晴れ。 」で終わる文字列 いいね。 ねねね。 だよね。 いいわ。 いいのね! 「〇〇cm」 30cm 1,000,000cm 50cm 33m 150メートル それぞれルールを満たす文字列は、上記の例の他にも無数にあり、(多すぎて)すべてを書ききる事は難しいでしょう。 そのような場合に、「文字のならびの条件」自体をシンプルに記述するための方法こそ、「正規表現」なのです。 そして、このような条件の事を「パターン」と呼びます。 例えば、上記であげた例はそれぞれ、正規表現を使って、それぞれこのように表せます。 」で終わる文字列. それぞれのメタ文字について、詳しくは後のセクションで解説していきます。 」などの、メタ文字を使って、文字のパターンを表せるんだね。 「 The literals」というと「文字通りの意味を持った文字群」というような表現となり、「特殊な意味をもったメタ文字に対して、文字通りの意味をもったリテラル」と対比的に使われる呼称となっています。 具体的な利用ケース 繰り返しになりますが、パターンとは、文字列を特徴づけるルールや条件であり、正規表現は、通常のテキスト文字とメタ文字(特殊文字)を組み合わせてパターンを記述するための記法と言えます。 特定のパターンを持つ無数の文字列をすべて一通りに書き表す事ができるため、しばしば文字列の検索や置換に利用されています。 Google Documentの「検索と置換」では、正規表現が利用できる。 パターンにマッチする文字列を見つけて、特定のルールで置き換えたい また、例えば、事務作業で下記のような場面に出くわすかもしれません。 そのような場合「全角数字、なんでもいいから全て」というルールを検索ボックスに打ち込めたらいいのに・・、と感じるかもしれません。 まさに正規表現は、そのようなルール、すなわち「パターン」を記述するために利用できます。 「すべての全角数字で構成された文字列」は、正規表現では下記のように記述できます。 正規表現のメタ文字(特殊文字) 正規表現は、「通常の文字(リテラル)」と「メタ文字」によって構成されます。 このセクションでは、メタ文字を使った、基本的な正規表現によるパターンの記述法を一つずつ見ていきます。 あらゆる一文字を表す「. (ドット)」 それでは、早速メタ文字を利用していきます。 正規表現での最もよく利用するメタ文字の一つは「. (ドット)」です。 これを使えば、 改行以外のあらゆる一文字を表す事ができます。 これはいわゆる「ワイルドカード」という役目をします。 たとえば、「. 」であれば、「あ」「ア」「!」などなんでもいい一文字です。 例を見てみます。 が大好き。 早寝早起が大好き。 焼肉定食が大好き。 」を4つ並べば、何の文字かを問わずに「4文字の文字列」を表す、というわけですね。 上記のように、文字数の分だけ、何度も「. (ドット)」を繰り返し入力するのは、ちょっと大変です。 マッチしたい文字は4文字かもしれませんし、30文字かもしれません。 そんな時、正規表現には、そのパターンが何回繰り返されるかを単純に表現する便利な方法があります。 0回以上、というのは、その文字が現れない場合も含める表現です。 あるの?ないの?どっちなの?!というイメージの「?」だね。 あくまで僕の覚え方だよ〜。 これは便利ですね。 上限値を省略した例です。 お水くださ〜〜い。 お水くださ〜〜〜〜〜〜〜〜〜い。 繰り返しの下限値を省略した例です。 」も、全部カバーできちゃうんだね・・・。 余談ですが、パターンの繰り返しの指定は「最長一致」「最短一致」の概念に注意する必要があります。 こちらに詳しく記載しましたので、ご一読下さい。 いずれかのパターン「 」 ちょっとラーメンの話に限定したいので、もうすこし絞り込みたいです。 正規表現では、()を使ってグループ化することができます。 醤油が一番です。 指定した文字のうち、いずれか「文字クラス」 半角の角括弧「[」「]」を使って囲んだ文字であれば、なんであればマッチさせることができる表現です。 このような表現は、正規表現において「文字クラス」と呼ばれます。 文字クラスの括弧内には、多くの複数の文字が記述されますが、それ全体で「いずれかの一文字」を表すことに注意して下さい。 上記の半角・全角数字の表現は下記のように短縮できます。 味玉は999999999円です。 ASCIIコードについては、こちらをご覧ください。 否定文字クラスは、指定した文字以外の一文字を表します。 こちらもご一読下さい。 1行の文字列の末尾や、先頭を指定できます。 このような文字でなく位置を限定するメタ文字を「アンカー」や、「位置指定子」と呼ぶことがあります。 メタ文字の一覧です: 表現 意味. カッコ内で指定した文字以外のいずれかの一文字 X サブパターン。 カッコ内のパターンにマッチした文字列を後方参照できる。 ネスト可能。 直前のパターンが何回連続するかをNumで指定。 こちらは量指定子の一覧です。 直前のパターンの1回以上連続? 2つのバックスラッシュの機能を紹介します。 1メタ文字・デリミタをエスケープする メタ文字をエスケープ 正規表現のメタ文字は、特別な意味を持ったものとして処理されます。 では例えば、「. (ドット)」そのものをマッチしたい時はどうすればよいのでしょうか? メタ文字をそのままの文字として認識させたい時はスラッシュを使ってエスケープ(=迂回)します。 下記のように、メタ文字の直前にスラッシュを配置することで、直後のメタ文字を通常の文字として認識させることができます。 com デリミタをエスケープ 多くのプログラミング言語では、正規表現を記述する際に、 何らかの半角文字で、その両端を囲むことになっています。 この囲み文字を「デリミタ」と呼びます。 デリミタと同じ文字は、正規表現中での混同を避けるため、エスケープする必要があります。 下記はPHPの例です。 デリミタによく使われる文字は「 」「 」などがあります。 正規表現のエスケープに関して、こちらの記事もどうぞ:• 2エスケープシーケンスを使ったパターン表現の利用 正規表現において、バックスラッシュの役割は、メタ文字をエスケープするだけではありません。 エスケープで開始する特殊なメタ文字も存在します。 下記は、正規表現で利用できるエスケープシーケンスの一覧です。 修飾子は、プログラミング言語や正規表現エンジンによって異なる場合が多く、注意が必要ですが、PHP(PCRE)を例に取って、代表的なものをご紹介します。 大文字・小文字を区別しない「i」 「i」オプションを付けると、大文字と小文字を区別しないでマッチングを行います。 通常PCREでは「. (ドット)」は「改行コード以外の文字」という定義ですが、このオプションを付けると、「. (ドット)」が改行コードを含めるようになります。 また、各言語利用可能なオプションや指定方法が異なりますので、PHP以外では、各言語の仕様を確認して下さい。 正規表現のサンプル集 ご参考まで、いくつかの正規表現のサンプルをまとめました。 郵便番号の正規表現 数字とハイフンの組み合わせによる正規表現です。 com, www. example. 数字は何桁でもマッチするようにかきました。 改行コードは、OS毎に異なります。 半角スペース、全角スペースをマッチする正規表現 半角・全角スペースは、メタ文字ではありませんので、エスケープが不要です。 正規表現中でもそのまま(リテラルで)記載することができます。 下記は、見にくいというか見えないですが、半角スペースと全角スペースが文字クラスとして表現されています。 正規表現チェッカー 言わずと知れた(?)日本語版のシンプルな正規表現チェッカー。 「正規表現 チェック」と検索するとトップに表示されますので、ご存知の方も多いと思います。 (2018年3月) 決して多機能ではないですが、日本語かつ、シンプルので、安心感がありますね。 入門者におすすめです。 URL :• 対応言語 :PHP, Javascirpt Debuggex 機能が豊富で画面もすっきりして見やすい正規表現チェックツールです。 エディターフィールドの関係で、やや日本語が入力しにくいのが難点・・・。 URL :• 対応言語 :PHP, Javascirpt, Python• その他の機能:URLによる画面共有、コードスニペットの生成、、リアルタイムチェック、他 Rubular こちらもシンプルなチェックツール。 画面がスッキリして見やすいですね。 対応言語はRubyのみですが、基本的な正規表現をチェックする限りは問題にならないでしょう。 いちいち実行ボタンを押さなくてもよいのが使いやすいですね。 筆者はこちらを最もよく利用します。 URL :• 対応言語 :Ruby• その他機能 :URLによる画面共有、リアルタイムチェック まとめ いかがだったでしょうか?はじめはなんだか得体の知れない者のように感じますが、ひとたび覚えてしまえば、簡単な正規表現はすぐに記述できますし、また非常に便利だと思います。 1点注意が必要なのは、正規表現は「ライブラリ」と呼ばれる処理エンジンがプログラミング言語によって様々だという点です。 実際に、プログラミングで利用する場合は、利用している正規表現エンジンの仕様にも気を配る必要がありますので、注意してくださいね。 さて、当サイトでは多くの正規表現のよくある疑問に対する情報をまとめています。 気になるものがあればご一読下さい。 正規表現のメタ文字• 基本的な表現方法• 数字の表現方法• やや高度な正規表現• 正規表現の参考情報 以下、参考リンクです:• また、Vim (テキストエディタ)を利用する場合、すこし正規表現が独特な記述法となることが多いです。 Vimの正規表現に関しては、こちらをご確認下さい。
次の一定の動作をさせるコマンドを複数組わせて送る事で、測定器を特定の状態にする、測定器に測定をさせる、測定値を取得するなどのリモート制御が実現できます。 例えば、以下のように上から順番に複数のコマンドを送る事で、測定の制御を行います。 5V :TRIG:SOUR CHAN1 :TRIG:SWE NORM :TRIG:MODE EDGE :TRIG:LEV 0 :DIGITIZE :MEAS:VTOP? CHAN1 読み取り :MEAS:VBAS? CHAN1 読み取り リセット 時間軸スケールを500usecに設定 チャンネル1の表示をオン チャンネル1のスケールを0. 5Vに設定 トリガソースをチャンネル1に設定 トリガモードをノーマルに設定 トリガをエッジトリガに設定 トリガレベルを0Vに設定 トリガ Vtopを測定し、値を返す 読み取り Vbaseを測定し、値を返す 読み取り 「チャンネル表示をオン」などのように、フロントパネルでのボタン操作が、その意味を持つコマンドに置き換わっている事がわかります。 このように、フロントパネルで順番にボタンを押して操作している事と、同じ意味を持つコマンドを順番に送る事で、測定器の制御を行っていきます。 ここからは、コマンドに関して、説明していきます。 コマンドは、特に、GPIBの仕様であるIEEE488. 2にて定められているコマンドに、共通コマンドと、SCPI(スキッピ)コマンドがあります。 2では、リセット、セルフテスト、ステータス・オペレーションなど、基本機能を実行するコマンドの互換性を持たせるために、共通コマンドを定義しました。 そのため、共通コマンドは、どのメーカーの、どの測定器でも、同じ文字列、同じ意味を持ちますので、Keysight社の測定器でも、他メーカーの測定器でも、IEEE488. 2準拠の測定器であれば、お使いになることができます。 下記の表は、よく測定器制御に用いられる共通コマンドの一部です。 測定器のIDを取得するコマンド。 測定器は、以下のようなフォーマットの文字列で情報を返します。 リセットには以下の動作が含まれます。 機器を決められた状態にセットする(決められた状態に関しては、各測定器のマニュアルをご参照ください)• 実行待ち動作の中止• 測定器に対して内部セルフテストを実行させ、テスト結果を返すコマンド。 正常時には「0」が返り、異常時には、エラーコードが返ります。 実行待ちの動作がすべて終了したら、スタンダード・イベント・ステータスレジスタのビット0をセットします。 そのため、動作完了を確認するには、スタンダード・イベント・ステータスレジスタのビットを確認する必要があります。 動作完了クエリ・コマンド。 実行待ちの動作がすべて終了したら、「1」を返します。 を送れば、測定器の設定が終了した場合に、「1」が返りますので、これを見て、次の測定へ移ります。 のタイムアウト設定を長めに設定しておきます。 ステータスレジスタをクリアします。 ステータスレジスタを用いる場合、事前にレジスタ内のビットをクリアするのに用います。 ステータスバイトを読み取るコマンド。 このSCPIコマンドが定められる前は、「F1R2T1」(意味:DC電圧ファンクション、1Vレンジに切替え、読取りをトリガする)のような動作とは意味のないコマンド(文字列)が採用されていました。 しかし、コマンドを読んでも、何をしているか理解できない事や、測定器メーカーによって文字列の解釈方法が異なるために、明確さや互換性を高める事を目的に、電子計測器メーカーが集まり、共通の測定器制御方式の一つとして、SCPIコマンドが策定されました。 現在、弊社の測定器のほとんどは、SCPIコマンドを採用しており、他社でもSCPIコマンドをサポートする測定器が増えています。 例えば、「:TIMebase:SCALe 0. 1」は、オシロスコープの時間軸レンジを、100msecにするというものです。 見ただけで、どのような命令の内容か判断する事ができます。 また、大きな特徴は、階層構造(ツリー構造)となっていることです。 階層構造を取り、上位(ルート)キーワードと下位のキーワードから構成することで、コマンドの予測性を高めています。 例えば、周波数を測定するコマンドは、「:MEASure:FREQuency? 」、振幅を測定するコマンドは、「:MEASure:VPP? 」となります。 測定を司るコマンドは、どれもルートは同じ:MEASureとなり、「:」(セミコロン)を付けて、下位キーワードとして、周波数測定、振幅測定を表します。 ロングフォームとショートフォーム SCPIコマンドには、コマンドすべてを示すロングフォームと、小文字で記述されている文字を省いたショートフォームの2つの記述形式があります。 例えば、「:TIMebase:SCALe 0. 1」を、ロングフォームで送る場合には「:TIMebase:SCALe 0. 1」のまま、ショートフォームで送る場合には、「:TIM:SCAL 0. 1」となります。 「:TIMe:SCALe 0. 1」のような小文字の一部だけを省略したコマンドは、測定器にてエラーとなりますので、ご注意ください。 小文字と大文字の区別 測定器内部のSCPIパーサーでは、大文字、小文字を区別しません。 そのため、「:TIMebase:SCALe 0. 1」でも、「:TIMEBASE:SCALE 0. 1」でも、測定器は受け取る事ができます。 注意すべきは、数値パラメーターに、工学単位のサフィックス(例:M、k、m、u)を付けた場合です。 文字「M」、「m」については混乱が生じます。 便宜上、機器は「mV」(または「MV」)をミリボルトと解釈しますが、「MHZ」(または「mhz」)をメガヘルツと解釈します。 コマンド区切り文字 コロン : を使用して、コマンド・キーワードを下位のキーワードと区切ります。 コマンド・キーワードとパラメーターを区切るには空白スペースを挿入する必要があります。 2つ以上のパラメーターが必要なコマンドの場合は、以下のようにカンマを使用して隣接するパラメーターと区切る必要があります。 パラメーター 「:TIMebase:SCALe 0. 1」のように、コマンドと、パラメーター(0. 1)の間には、半角スペースを入れて、区切ります。 パラメーターの設定の問合せ ほとんどのパラメーターは、コマンドに疑問符(? )を追加することによって、現在の値を問い合わせることができます。 例えば、「:TIMebase:SCALe 0. 1」は、オシロスコープの時間軸レンジを、100msecにします。 次に、コマンドに、疑問符を追加した「:TIMebase:SCALe? 」 を送る事で、時間レンジを問い合わせする事ができます。 また、「:TIMebase:SCALe? MAX」、「:TIMebase:SCALe? MIN」のようにすれば、許可されている最小カウントまたは最大カウントを問い合わせることもできます。 弊社では、多くの測定器では、コマンドは、操作を説明するユーザーズガイドとは、別冊のプログラマーズガイドに収められている事が一般的です。 ただ、コマンドが、あまり多くない測定器の場合には、ユーザーズガイドに記載されている場合もあります。 コマンドが多い測定器(=制御できる動作が多い測定器)のプログラマーズガイドは、1000ページを超えるものがあります。 これは、その測定器で実現できる事が非常に多いからです。 しかし、実際には、良く使うコマンドは、その中でも、一握りです。 一握りのコマンドを把握する方法は、サンプルプログラムのコマンドを追ってみる事です。 サンプルプログラムは、その測定器の基本的な動作を網羅した物が多く、そのため、その測定器で、中心となる良く使うコマンドが用いられています。 それらのコマンドを、プログラマーズガイドで調べ、パラメーターを把握する事で、基本的な制御ができるようになります。 次に、その上を目指すには、SCPIコマンドのルートを把握します。 ルートは、測定、設定などのカテゴリからできており、把握しやすいです。 ルートを把握する事で、制御コマンドのあたりが付きやすくなります。
次のRohl, Jeffrey S. 1973. Programming in Fortran. Oxford Oxfordshire: Oxford University Press. describing the method in Hollerith notation under the Fortran programming language. 1993. Progress in Standardization in Health Care Informatics. IOS Press. 141• Friedl, Jeffrey E. 2002. Mastering Regular Expressions: Powerful Techniques for Perl and Other Tools. O'Reilly. 319• Scott, Michael Lee 1999. Programming Language Pragmatics. Morgan Kaufmann. ; Larry; Jon Orwant July 2000. Programming Perl Third ed. O'Reilly. Kaufmann, Matt 2000. Computer-Aided Reasoning: An Approach. Springer. Meyer, Mark 2005. Explorations in Computer Science. Oxford Oxfordshire: Oxford University Press. references C-style programming languages prominently featuring curly brackets and semicolons. Dilligan, Robert 1998. Computing in the Web Age. Oxford Oxfordshire: Oxford University Press. Describes syntax and delimiters used in HTML. Learning Perl. Oxford Oxfordshire: Oxford University Press. Describes string literals. Watt, Andrew 2003. Sams Teach Yourself Xml in 10 Minutes. Oxford Oxfordshire: Oxford University Press. Describes XML processing instruction. Cabrera, Harold 2002. C for Java Programmers. Oxford Oxfordshire: Oxford University Press. Describes single-line and multi-line comments. 2010年3月12日閲覧。 See e. , Smarty template system documentation, "escaping template delimiters". International Organization for Standardization December 1, 1975. " 2014年5月12日, at the. Internet Assigned Numbers Authority Registry. Alternate U. 2014年5月12日時点の [ リンク切れ]よりアーカイブ。 2014年5月10日閲覧。. Accessed August 7, 2005. Lewine, Donald 1991. Posix Programmer's Guide. Oxford Oxfordshire: Oxford University Press. Describes use of control-z. 156,• Friedl, Jeffrey 2006. Mastering Regular Expressions. Oxford Oxfordshire: Oxford University Press. describing solutions for embedded-delimiter problems p. 472. Kahrel, Peter 2006. Automating InDesign with Regular Expressions. O'Reilly. ; Larry; Jon Orwant July 2000. Programming Perl Third ed. O'Reilly. ; Larry; Jon Orwant July 2000. Programming Perl Third ed. O'Reilly. 2001. Ruby in a Nutshell. O'Reilly. In Ruby, these are indicated as general delimited strings. Javvin Technologies, Incorporated 2005. Network Protocols Handbook. Javvin Technologies Inc.. 200, Cicling 2001. Computational Linguistics and Intelligent Text Processing. Oxford Oxfordshire: Oxford University Press. Describes whitespace delimiters. 258. Friedl, Jeffrey 2006. Mastering Regular Expressions. Oxford Oxfordshire: Oxford University Press. page 472. Rhee, Man 2003. Internet Security: Cryptographic Principles, Algorithms and Protocols. John Wiley and Sons. an example usage of ASCII armoring in encryption applications• Gross, Christian 2005. Open Source for Windows Administrators. Charles River Media. an example usage of ASCII armoring in encryption applications• Kalani, Amit 2004. Developing and Implementing Web Applications with Visual C. NET and Visual Studio. NET. Que. describes the use of Base64 encoding and VIEWSTATE inside HTML source code• 日本国特許第6511598号.
次の