正規表現概要

Similar documents
Socketクラス

正規表現

正規表現応用

このルールをそのまま正規表現として書くと 下記のようになります ^A[0-9]{2}00[0-9]{3}([0-9]{2})?$ ちょっと難しく見えるかもしれませんが 下記のような対応になっています 最初 固定 年度 固定 通番 ( 枝番 ) 最後 ルール "A" 数字 2 桁 0 を 2 桁 数字

正規表現詳細

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 文字列 文字列リテラル プログラムの中で文字列を表す方法は幾つか有るが 基本的な方法は下記の 2 種で有る 対象と成る文字の集まりをダブルクオーテーション ( " ) で囲うか シングルクオーテーション ( ' ) で囲う PYTHON3 "

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

ファイル操作-バイナリファイル

ICONファイルフォーマット

VB.NET解説

ファイル操作

Userコントロール

グラフィックス

ファイル操作-インターネットキャッシュ

構造体

VB実用Ⅲ⑩ フリーデータベースⅡ

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

プラグイン

ハッシュテーブル

NotifyIconコントロール

プロセス間通信

データベースプログラミング

ListViewコントロール

AQUOS ケータイ ユーザーガイド

かんたん携帯9 ユーザーガイド

MS Office オートメーション

Visual Basic 資料 電脳梁山泊烏賊塾 コレクション初期化子 コレクション初期化子 初めに.NET 版の Visual Basic では 其れ迄の Visual Basic 6.0 とは異なり 下記の例の様に変数宣言の構文に 初期値を代入する式が書ける様に成った 其の際 1 の様に単一の値

5.1. ホームページ登録 ホームページ URL を登録します ホームページ URL は基本契約で 1 個 (100MB) まで無料 2 個目以降は有料オプションサービス ( 月額 300 円 / 個 ) で追加登録が可能です (1) 左メニューの HP アカウント登録 リンクをクリックします (1

このうち ツールバーが表示されていないときは メニューバーから [ 表示 (V)] [ ツールバー (T)] の [ 標準のボタン (S)] [ アドレスバー (A)] と [ ツールバーを固定する (B)] をクリックしてチェックを付けておくとよい また ツールバーはユーザ ( 利用者 ) が変更

回文作成支援プログラム

64bit環境で32bitコンポーネントの利用

JavaプログラミングⅠ

モグラ叩きプログラム

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます 文字入力方式には モード1( かな方式 ) モード2(2タッチ方式 ) モード3( ニコタッチ方式 ) の3 種類があります 本書では モード1( かな方式 ) での入力例を中心に記載します モー

Word2013基礎 基本操作

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます ダイヤルボタンの文字割り当てについて (ZP.17-12) ❶ ❷ ❸ ❶ 入力モード切替操作漢 : 漢字 ひらがな入力モード 1 カナ : カタカナ入力モード英 : 英字入力モード数 : 数字入

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます ❶ ❷ ❸ ❶ 入力モード切替操作漢 : 漢字 ひらがな入力モード 1 カナ : カタカナ入力モード英 : 英字入力モード数 : 数字入力モード ❷ 全角 / 半角切替操作全 : 全角入力モード

●コンテンツ「掲示板」

TEXTOS-S: 検索 置換 連立検索置換式を使って 資料をマークし または変形します マークと 変形を同時にすることも可能です 検索式にはリテラル ( 文字列そのもの ) ワイルドカード 正規表現が選択できます 上のテキストボックスに検索式を直接書き込むときは [Ctrl]+[Enter] を押

DAOの利用

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

回文作成支援プログラム

_unix_text_command.pptx

Microsoft Word - no103.docx

sinfI2005_VBA.doc

文字コード略歴 よこやままさふみ社内勉強会 2012/05/18 文字コード略歴 Powered by Rabbit 2.0.6

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

データアダプタ概要

VB 資料 電脳梁山泊烏賊塾 音声認識 System.Speech の利用 System.Speech に依るディクテーション ( 音声を文字列化 ).NetFramework3.0 以上 (Visual Studio 2010 以降 ) では 標準で System.Speech が用意されて居るの

クイックマニュアル(利用者編)

CASEC

スライド 1

Excel2013 データベース1(テーブル機能と並べ替え)

VB実用⑦ エクセル操作Ⅰ

プログラミング実習I

WebCADD.com ご利用ガイド

Web データ管理 JavaScript (1) (4 章 ) 2011/12/7( 水 ) 湘南工科大学講義資料 Web データ管理 (2011) 阿倍 1/21

文字入3-2 力3 文字入力について ひらがな 漢字 カタカナ 英数字 記号 絵文字などが入力できます 文字入力方式には モード1( かな方式 ) モード2(2タッチ方式 ) モード3( ニコタッチ方式 ) の3 種類があります 本書では モード1( かな方式 ) での入力例を中心に記載します モー

PowerPoint プレゼンテーション

(Microsoft Word - 01PowerPoint\217\343\213\211C\203p\203^\201[\203\223\222m\216\257\225\\\216\206.doc)

ExcelVBA

文字列操作と正規表現

HDE Controller X 1-4. メーリングリスト

Taro-Basicの基礎・はじめに(公

回文作成支援プログラム

シーケンシャルファイルの操作

オートマトン 形式言語及び演習 1. 有限オートマトンとは 酒井正彦 形式言語 言語とは : 文字列の集合例 : 偶数個の 1 の後に 0 を持つ列からなる集合 {0, 110, 11110,

Xperia™ XZ ユーザーガイド

XMLの利用(XMLとXSL)

5-2. 顧客情報をエクスポートする 顧客管理へのアクセス手順 メールディーラーで管理する顧客情報に関する設定を行います 1. 画面右上の 管理設定 をクリックする 2. 管理設定 をクリックする 3. ( タブ ) 顧客管理 をクリックする 2

フィルタとは

X2 使いこなしガイド


グーグル検索マクロの使い方

PowerPoint プレゼンテーション

ファイル監視

グラフィックス 目次

1. ユーザー管理 サーバーや特定のサービスにアクセスするためには サーバー上にユーザーアカウントが設定されている必要があります また ユーザーごとに利用環境などを個別に設定することができます また ユーザーの管理の簡便化を図るためにグループが設定できます グループを設定することで ユーザーごとの設

シンプルスマホ3 ユーザーガイド

JDL Webストレージサービス はじめにお読みください

万年暦プログラム

講習No.1

情報処理Ⅰ

目次 ( ページ ) 1. はじめに 1 2. 特例債移行申請 CSV ファイルについて 1 3. 文字種 2 4. 文字コード 2 5. 項目の編集方法について 3 6. 入力ファイルについて 4 7. 提出方法 7 8. セキュリティーについて 7

PYTHON 資料 電脳梁山泊烏賊塾 PYTHON 入門 関数とメソッド 関数とメソッド Python には関数 (function) とメソッド (method) が有る モジュール内に def で定義されて居る物が関数 クラス内に def で定義されて居る物がメソッドに成る ( 正確にはクラスが

ポインタ変数

グラフィックス 目次

Microsoft Word - wpphpmysql.doc

PowerPoint プレゼンテーション

文字入力60 キーボードについて IS11N では 画面に表示された ATOK のキーボードを使って文字を入力します キーボードは画面上の文字入力エリアをタップすると表示され M を長押しすると非表示になります ATOK には 2 種類のキーボードが用意されています テンキーキーボード一般的な携帯電

スライド 1

SOC Report

Microsoft PowerPoint - prog03.ppt

ポインタ変数

キーワードと検索条件について キーワード調べたい言葉 ( 検索語 ) を入力します スペースで区切って最大 0 個まで入力可能です 使用できる文字は漢字 ひらがな カタカナ 英数字です ( 記号 旧漢字も対応しています ) 全角 / 半角 大文字 / 小文字のどちらで入力しても区別なく検索されます

文字の装飾 / 配置について 文字の装飾 ( ボールド / イタリック / アンダーライン等 ) 網掛けは行わないでください 背景色は バーコード部分とのコントラストが低下する色を避けてください 文字の回転を行う場合 回転角度は 90 度 180 度 270 度以外は指定しないでください 文字間隔の

回文作成支援プログラム

Microsoft PowerPoint - T4OOマニュアル_admin管理者_ pptx

< E8E968BC6916E91A291E58A E58A772E B838B2E786C7378>

Taro-cshプログラミングの応用.jt

Transcription:

正規表現 正規表現の概要 此処では.NET Framework の正規表現に付いて 主に正規表現パターンに付いて 基本を極く簡単に説明する 猶.NET Framework の正規表現は Perl5 の正規表現に対応する様にデザインされて居るので Perl の正規表現を理解して居れば問題は無い ( 勿論 理解して居なくても問題は無い ) 正規表現で出来る事 正規表現は 文字列を検索する為に使用する 正規表現を使うと 可成り複雑な検索が可能で有る 正規表現を利用する主なケースには 下記の様な物が挙げられる 文字列内に指定されたパターンと一致する部分が有るか調べる 例えば 入力された文字列が電子メールアドレスと仕て適当か調べる等 文字列から指定されたパターンと一致する部分を検索 抽出する 例えば 文字列内に有る URL の部分を総て抜き出す等 文字列から指定されたパターンと一致する部分を探して別の文字列に置換する 例えば 文字列内に有る URL にリンク (<a> タグ ) を付けたり HTML のタグを削除する等 補足 : 此等以外にも 文字列を分割して配列にする場合にも使用出来る 此の場合は Regex.Split メソッドを使用する パターンの記述法 或る文字列と一致する部分を検索すると謂う事を指定するには 其れを表現したパターンを書く必要が有る 適切なパターンを書ける様に成る事が 正規表現を勉強する最大の目標と成るで有ろう パターンは ファイルの検索等で使用される * や? 等のワイルドカードを理解して居るならば 此れと同じ様な物だと思って結構で有る 例えば 文字列から或る郵便番号と一致する部分を探し度いとする 其の郵便番号が決まって居り 123-4567 で有るならば パターンは 123-4567 の儘で良い 但し 此の様に探し度い文字列が決まって居るならば 正規表現を使う意味は無い 決まった郵便番号ではなく 郵便番号形式の文字列を探し度い 詰まり 何等かの数字が 3 個続き ハイフン ( - ) が挟まり 亦 数字が 4 個続く文字列 を探し度いと謂う事で有れば 正規表現が役に立つ 此の様な場合 書く可きパターンは d d d- d d d d と成る ( 別の書き方も出来る ) 詰まり d は 何等かの数字 1 文字 を意味する 此の様に正規表現のパターンでは 等の特定の文字列が特別な意味を持って居る 此の様な特別な意味を持つ文字を メタ文字 ( メタキャラクタ ) と呼ぶ -1-

正規表現の基本 簡単な例.NET で正規表現を扱うには Regex クラスを使用する 以下に Regex クラスを使って文字列の検査 抽出 置換を行う簡単な例を示す 更に詳しい例に付いては 正規表現詳細を参照され度い Visual Basic ' txtsrc に郵便番号形式の文字列が含まれて居るか調べる If System.Text.RegularExpressions.Regex.IsMatch( _ txtsrc.text, " d d d- d d d d") Then MessageBox.Show(" 郵便番号が含まれて居る ") End If ' txtsrc 内の郵便番号形式の文字列を総て抽出する Dim mc As System.Text.RegularExpressions.MatchCollection = _ System.Text.RegularExpressions.Regex.Matches( txtsrc.text, " d d d- d d d d") For Each M As System.Text.RegularExpressions.Match In mc MessageBox.Show(M.Value) Next ' txtsrc 内の郵便番号形式の文字列の "-" を削除して で囲む txtsrc.text = System.Text.RegularExpressions.Regex.Replace( _ txtsrc.text, "( d d d)-( d d d d)", " $1$2 ") C# // txtsrc に郵便番号形式の文字列が含まれて居るか調べる if (System.Text.RegularExpressions.Regex.IsMatch(txtSrc.Text, @" d d d- d d d d")) { MessageBox.Show(" 郵便番号が含まれて居る "); } // txtsrc 内の郵便番号形式の文字列を総て抽出する System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(txtSrc.Text, @" d d d- d d d d"); foreach (System.Text.RegularExpressions.Match m in mc) { MessageBox.Show(m.Value); } // txtsrc 内の郵便番号形式の文字列の "-" を削除して で囲む txtsrc.text = System.Text.RegularExpressions.Regex.Replace( txtsrc.text, @"( d d d)-( d d d d)", " $1$2 "); -2-

メタ文字一覧 下記に 良く使われるメタ文字と其の意味を紹介する 詳しくは MSDN の 正規表現言語要素 を参照され度い 或る 1 文字を表す文字 ( アトム ) 文字説明使用例.( ドット ) s d w 改行文字 ( n) 以外の任意の一文字 ( 但し [ ] 内ではピリオド文字 ) 空白文字 改行文字 タブ文字 半角 / 全角スペース文字等 [ f n r t v x85 p{z}] と同じ ( 因みに S は s 以外の文字を表す ) 0 から 9 までの数字 全角を含む p{nd} と同じ ( 因みに D は d 以外の文字を表す ) 単語に使用される文字 アルファベット 数字 アンダーバー (_) ひらがな カタカナ 漢字等 [ p{ll} p{lu} p{lt} p{lo} p{nd} p{pc} p{lm}] と同じ ( 因みに W は w 以外の文字を表す ) r キャリッジリターン ( u000d と同じ ) n ラインフィールド ( 改行文字 u000a と同じ ) t タブ ( u0009 と同じ ) 文字の前に を付けると 其の文字 メタ文字の機能を無効にする時に使う ( 或る文字列内のメタ文字を総て でエスケープするには Regex.Escape メソッドを使うと良い ) [ ] [ ] 内のどれか 1 文字 ([abc] ならば a か b か c) [^ ] [ - ] [^] 内の文字以外の 1 文字 ([^abc] ならば a か b か c 以外の文字 ) 連続した文字範囲の 1 文字 ([0-9] ならば数字 1 文字 [a-za-z] ならばアルファベット 1 文字 ) u0000 4 桁の 16 進数で表される Unicode 文字 x00 2 桁の 16 進数で表される ASCII 文字 -3-. 内に任意の 1 文字が有る箇所にマッチ Visual sbasic Visual と Basic の間に空白文字が 1 文字有る箇所にマッチ VB d VB の後に数字が 1 文字有る箇所にマッチ w 内に単語に使用される文字が 1 文字が有る箇所にマッチ r n Windows の改行文字 (CRLF) にマッチ r n Windows の改行文字 (CRLF) にマッチ n t 改行文字 ( n) の後にタブが続く箇所にマッチ DOBON.NET DOBON.NET にマッチ VB[2456] VB の後に 2 か 4 か 5 か 6 が続く箇所にマッチ [^ ] 内に 以外の 1 文字が有る箇所にマッチ VB[24-6] VB の後に 2 か 4 か 5 か 6 が続く箇所にマッチ [ uff61- uff9f] 半角カナ文字の 1 文字にマッチ [ x20- x7f] 半角英数記号文字 ( 0x20 ~ 0x7F) の 1 文字にマッチ

文字列内の位置を表す文字 ( アトミックゼロ幅アサーション アンカー 位置指定子 ) 此処で紹介するメタ文字は 文字列内の位置を表現した物で有る 文字とマッチする訳では無い ^ $ b 文字説明使用例 ^ d 文字列の先頭先頭に有る数字 1 文字にマッチ 文字列の末尾 ( 但し 文字列の末尾が n の時は 其の前と一致 末尾が n でも末尾で一致させるには z を使う ) 単語の境界 ( w と W の間 ) と一致 ( 但し [ ] 内ではバックスペース文字 因みに B は b 以外の境界を表す ) d$ 末尾に有る数字 1 文字にマッチ bvb b VB が単語と仕て現れる箇所にマッチ 文字の繰り返しを表す文字 ( 量指定子 ) 此処で紹介する量指定子は 文字 ( 又は グループ ) の繰り返しを表現する物で有る 最長マッチと最短マッチの違いは非常に重要だが 此れに付いては後述する 文字説明使用例 <[^>]*> * 直前の文字が 0 回以上繰り返す <> で囲まれた箇所にマッチ + 直前の文字が 1 回以上繰り返す? 直前の文字が 0 回 又は 1 回繰り返す {n,m} {n} {n,} *? 直前の文字が n 回以上 m 回以下繰り返す 直前の文字が n 回繰り返す 直前の文字が n 回以上繰り返す 最短マッチで 0 回以上の繰り返し (? は * +? { } の後に付けて最短マッチを表す事が出来る 最短マッチと最長マッチに付いては 後述 ) <[^>]+> <> 内に 1 文字以上有る箇所にマッチ -? d+ マイナスが付いた数字 或るいは付かない数字にマッチ d{2,6} 数字が 2 文字以上 6 文字以下続いて居る箇所にマッチ d{6} 数字が 6 文字続いて居る箇所にマッチ d{8,} 数字が 8 文字以上続いて居る箇所にマッチ <.*?> <> で囲まれた箇所にマッチ 選択 グループ化等を表す文字 此処で紹介するグループ化を使用する主なケースと仕ては 論理和に依る選択を行う場合や 前方参照 ( 後述 ) や Match.Groups プロパティでの抽出を行い度い場合等が挙げられる -4-

.NET Framework にはグループに名前 ( 或るいは番号 ) を付ける事が出来ると謂う特徴が有る グループに名前を付けても付けなくても グループには 1 から連番で番号が付けられる ( 番号 0 はパターン全体で有る ) 此処では先読み 後読みアサーションも紹介して居るが 此等は少し高度で有る 従って 初心者は 此等を無視しても良いが 知って置くと可成り役に立つ 因みに 後読みアサーションのパターンとマッチする文字列は固定長でなければ成らないとするエンジンが多いが.NET Framework では此の様な制限が無い 文字 説明 使用例 リンゴ りんご 林檎 で区切られた文字列の孰れか ( 論理和 ) リンゴ又はりんご又は林檎にマッチ ( ) グループ化する箇所 山田 ( 太郎 花子 ) 山田太郎又は山田花子にマッチ (?<name> ) グループに名前 ( 或るいは番号 ) を付ける ( 因みに < > の代わりに ' で括る事も出来る ) (?: ) キャプチャしないグループ (?= ) (?! ) (?<= ) (?<! ) 直後に此のパターンが現れる事を確認する ( ゼロ幅の肯定的先読みアサーション ) 直後に此のパターンが現れない事を確認する ( ゼロ幅の否定的先読みアサーション ) 直前に此のパターンが現れる事を確認する ( ゼロ幅の肯定的後読みアサーション ) 直前に此のパターンが現れない事を確認する ( ゼロ幅の否定的後読みアサーション ) VB(?<ver> d) VB の後に数字が有る箇所にマッチし 数字を "ver" と謂うグループ名でキャプチャ山田 (?: 太郎 花子 ) 山田太郎又は山田花子にマッチするが 太郎又は花子をキャプチャしない d+(?=%) 後ろに % が続く数字の連続にマッチ 但し % はマッチした箇所に含まれないし グループと仕てキャプチャもされない d+(?!%) 後ろに % が来ない数字の連続にマッチ (?<= ) d+ に続く数字の連続にマッチ 但し はマッチした箇所に含まれないし グループと仕てキャプチャもされない (?<! ) d+ 前に がない数字の連続にマッチ 前方参照 ( 後方参照 ) を表す文字 グループ化してキャプチャした文字列を後から参照する事が出来る 此れが前方参照 ( 後方参照 ) で有る 此れに依り キャプチャした文字列をパターンに埋め込む様な事が出来る -5-

文字 説明 使用例 number 番号が number のグループと一致した文字列 <(H d)>.*?</ 1> <H> タグで囲まれた箇所にマッチ k<name> 名前が name のグループと一致した文字列 ( 因みに < > の代わりに ' で括る事も出来る ) <(?<tag>h d)>.*?</ k<tag>> <H> タグで囲まれた箇所にマッチ 置換パターンで使用出来る特殊文字 前方参照 ( 後方参照 ) と同じ様に置換パターン内で以下の様な特殊文字を使用する事が出来る 前方参照と似て居る為 使用例は省略する 使用例は 正規表現応用を参照され度い 文字 $number ${name} $& 説明番号が number のグループと一致した文字列名前が name のグループと一致した文字列パターン全体と一致した文字列 良く使われるオプション オプションを指定する事も出来る オプションを指定するとメタ文字の意味が多少変わる物も有る.NET ではオプションを指定するのに RegexOptions 列挙体を使用する ( インラインで使用する方法も有るが 此処では紹介しない ) 以下に良く使われる重要なオプションを示す RegexOptions 列挙体のメンバ IgnoreCase Singleline Multiline ECMAScript 説明 大文字と小文字を区別しない.( ピリオド ) の意味を変更し n を含めた総ての文字と一致する様にする ^ と $ の意味を変更し 文字列全体の先頭と末尾丈でなく 行の先頭と末尾にも一致する様にする 具体的には ^ は n の後 $ は n の前 ( 改行文字が r n で有ったと仕ても ) にも一致する様に成る ^ と $ の代わりに A と Z を使用すると Multiline の影響を受けずに文字列全体の先頭と末尾に一致させる事が出来る ECMAScript 準拠の動作とする 此の事で 一部のメタ文字の意味が変更される 例えば w は [a-za-z_0-9] と同じに s は [^ f n r t v] と同じに d は [0-9] と同じに成る CultureInvariant 言語の違いを無視する Compiled 正規表現をコンパイルして実行速度を上げる ( 但し 起動時間は長く成る ) 最長マッチと最短マッチ 最長マッチと最短マッチの違いは非常に重要なので 此処で説明して置く 例えば 鈎括弧 ( ) で囲まれた文字列を抽出する為に次の様なパターン ( コード ) を書いたとする -6-

Visual Basic Dim Mc As System.Text.RegularExpressions.MatchCollection = _ System.Text.RegularExpressions.Regex.Matches( txtsrc.text, ".* ") C# System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(txtSrc.Text, @".* "); 此の様なパターンでは 鈎括弧が複数有った場合 問題が起こる 例えば txtsrc に " あ い う " と入力されて居るならば マッチする文字列は " あ い う " の 1 つ丈で有る " あ " " い " " う " の 3 か所にマッチする様にするには パターンを ".*? " と書き換える 詰まり "*" の後ろに "?" を付けて 最短マッチにする "?" を付けないと最長マッチに成るので 一致する箇所が最も長く成る様な方法で検索が行われる 因みに上記の様な例で有れば 最短マッチにしなくても " [^ ]* " と書けば 粗同じ事が出来る 参考.NET Framework の正規表現 -7-