正規表現

12 分読む 最終更新日 2023年12月04日

正規表現

正規表現(RegEx)とは、テキストを検索するために使用される、特別な規則に従って記述された文字列のことです。正規表現では、検索の実行方法を定義する特定の形式の構文が使用されます。また、簡単な文字列のマッチングでは不可能な柔軟な検索を実行できます。

使用可能な演算子: - 以下の表には、Dispatcher Phoenixの正規表現で使用可能な一般的な演算子の一部を示してあります。すべての演算子が含まれているわけではありませんので、注意してください。

マッチング修飾子 - これらの文字は、検索の実行方法に影響します。
演算子

\ 一般的なエスケープ文字

.(ピリオド)任意の文字と一致します。

* 直前の1個または複数の文字と一致します。

? 直前の0個または1個の文字と一致します。

[] 一致する一連の文字を定義します。 たとえば、[0-9]は、0~9の数字と一致します。[a-z]は、小文字のaからzまでと一致します。[A,E,I,O,U]は、大文字の母音と一致します。

[^] 一致しない一連の文字を定義します。 たとえば、[^0-9]は、0~9の数字とは一致しません。

^ 行の先頭と一致します。

$ 行の末尾と一致します。

文字クラス

これらの文字クラスでは、指定されたいずれかの数字、単語構成文字、または特殊文字と一致します。

\d 10進数のいずれかの数字と一致します([0-9]の省略形)。

\D 10進数のいずれの数字とも一致しません([^0-9])。

\s いずれかの空白文字と一致します(タブ、改行、改ページ、復帰、またはスペース)。

\S いずれの空白文字とも一致しません。

\w 「単語」構成文字[a-z, A-Z, 0-9, _]のいずれかと一致します。

\W 「単語」構成文字[a-z, A-Z, 0-9, _]のいずれとも一致しません。

\b 単語の境界と一致します。

\B 単語の境界と一致しません。

\cx xで指定した任意の制御文字と一致します。たとえば、\csは、制御文字sと一致します。

\e エスケープ文字(hex 1B)と一致します。

\f 改ページ文字(hex 0C)と一致します。

\n 改行文字(hex 0A)と一致します。

\r 復帰文字(hex 0D)と一致します。

\t タブ文字(hex 09)と一致します。

\ddd 8進コードdddと一致します。

\xhh 16進コードhhと一致します。

正規表現の詳細については、以下のページを参照してください。

http://en.wikipedia.org/wiki/Regular_expression

正規表現の使用方法について詳しく知るためのチュートリアルについては、以下のページを参照してください。

http://www.regular-expressions.info/tutorial.html

Dispatcher Phoenix で使用可能な構文については、以下のリンク先で説明しています。 http://developer.gnome.org/glib/stable/glib-regex-syntax.html

正規表現での特殊文字の使用

以下の特殊文字を正規表現で使用して文字定義どおりに解釈されるようにするには、バックススラッシュ(\)を使用してそれらの文字が特別な意味を持たないようにします。

[ 左大かっこ

\ バックスラッシュ

^ キャレット

$ ドル記号

. ピリオド

| 縦線(パイプ記号)

? 疑問符

* アスタリスク

+ プラス記号

( 左丸かっこ

) 右丸かっこ

たとえば、1+1=2と一致するようにしたいときの正しい正規表現は、1\+1=2となります。そうしないと、プラス記号が特別な意味を持つことになります。

内容の検索

以下に示す Dispatcher Phoenix での正規表現の使用例では、以下のテキストファイルが検索されることを想定しています。

コンテンツ検索

  • 文字列 「test」 を検索するには、検索テキストフィールドに 「test」 と入力します。大文字/小文字の区別のオプションの指定によっては、検索結果が以下のようになります。

コンテンツ検索

  • 「test」という単語を検索するには、単語の境界を表す演算子\bで区切る必要があり、「\btest\b」という文字列を指定して検索すると、以下の結果が返されます。

コンテンツ検索

  • 1つの数字を含む複数の文字が検出されるようにするには、演算子「\d」を使用します。検索文字列「Test #\d」を使用すると、結果は以下のようになります。

コンテンツ検索

ファイル名の検索

解析ノードでは、正規表現を使用してファイル名を検索できます。ファイルの内容を検索する他のパーサーノードとは異なり、このパーサーノードではファイル名が検索されます。

たとえば、以下のようなファイルのリストがあるとします。

testfile1.txt

testfile2.xls

testfile3.docx

testfile4.doc

testfile5.psd

testfile6.pdf

testfile7.jpg

testfile8.tiff

検索文字列「testfile\d」を使用すると、上記リストのすべてのファイルが一致します。

メタデータ参照が可能な高度な機能

解析ノード(挿入、解析と配信、解析と挿入、および解析と置換)では、正規表現を使用するときの高度な機能も用意されており、検索と挿入、置換、または配信といった操作をより細かく制御できます。

正規表現とDispatcher Phoenixのメタデータ参照機能により、一致したテキストの一部分から情報を抽出するためのサブグループを指定できます。その後、この情報を置換または挿入といった操作で使用したり、今後使用するためにそれらの値をメタデータとして格納したりできます。

サブグループは、正規表現の一部分を1対の丸かっこで囲んで表されます。サブグループには固有の番号が与えられ(1から始まって左から右へと進む)、その番号で参照できます。さらに、グループには(山かっこ< >で囲まれた)「フレンドリー名」を指定して、番号ではなく名前で参照されるようにできます。

例:

コンテンツ検索

サブグループを参照するには、サブグループの番号をコロン(:)で区切って、「parser」のクラスを使用します。上記の例では、最初のサブグループを参照するのに、{parser:1}という構文を使用します。2番目のサブグループを参照するには、{parser:2}または、{parser:Value}のいずれかの構文を使用します(使用した正規表現による)。

置換または挿入の操作でこのサブグループの情報を使用するには、以下のいずれかのオプションを使用します。

\1 -「1」は、サブグループを表す数値です。

\g<1> - 「1」は、サブグループを表す数値です。

\g<Value> - 「Value」は、サブグループのフレンドリー名です。

ページレベルメタデータの指定

特定のページのメタデータを、2つの角かっこ([ ])の間にページ番号を追加して指定できます。これにより、特定のページで検出されたサブグループの最初の値のテキストが返されます。例:

{bar1:Address[5]}では、5ページのbar1:Addressの値が返されます。

ドキュメントレベルのメタデータを指定するには、0を2つの角かっこで囲んで追加するか、何も追加せず空白のままにしておきます。例:

{bar1:Address[0]}

{bar1:Address}

処理を1ページずつ行っている場合は(ベイツスタンプや注釈の適用など)、「current」という文字列を2つの角かっこで囲んで指定して、処理されているページからデータを抽出できます。例:

{annotate:text[current]}

メタデータの出現番号の指定

  • ページレベルの角かっこの後にもう1対の角かっこを使用して出現番号を指定することもできます。例:

    {value:bar[3] [2]と指定すると、3ページで2番目に出現した「value:bar」が返されます。

    {parser:Value[0][1]}と指定すると、ドキュメントレベルで最初に出現した「parser:Value」が返されます。

  • 最初に検出された値が返されるようにするには、[] と指定します。

    たとえば、{bar1:zone.Address[]}と指定すると、ページにかかわらず、「Address」ゾーンで最初に検出されたバーコードが返されます。

  • 複数の値が1つの文字列に結合されて返されるよう指定するには、|を使用します。

    たとえば、{bar1:zone.part number[]|-}と指定すると、bar1:zone.part numberのすべての値が「-」で区切られて返されます。

システム定義変数

日付タイプ

変数: %a(省略された曜日名)
構文: {date:%a}

変数: %A(完全な曜日名)
構文: {date:%A}

変数: %b(省略された月名)
構文: {date:%b}

変数: %B(完全な月名)
構文: {date:%B}

変数: %d(日付(01~31))
構文: {date:%d}

変数: %H(24時間表記の時間(00~23))
構文: {date:%H}

変数: %I(12時間表記の時間(01~12))
構文: {date:%I}

変数: %j(年間通算日(001~366))
構文: {date:%j}

変数: %m(10進数の月(01~12))
構文: {date:%m}

変数: %M(分(00~59))
構文: {date:%M}

変数: %p(AMまたはPMの指定)
構文: {date:%p}

変数: %S(秒(00~61))
構文: {date:%S}

変数: %u (日曜日を週の最初の曜日として開始する週番号 (00-53))
構文: {date:%U}

変数: %w(月曜日を週の最初の曜日として開始する週番号(0~6))
構文: {date:%W}

変数: %y(年、最後の2桁(00~99))
構文: {date:%y}

変数: %Y(年)
構文: {date:%Y}

変数: %Z(タイムゾーンの名前または省略名)
構文: {date:%Z}

変数: %%(タイムゾーンの名前または省略名)
構文: {date:%%}

複合機パネル

変数: jcf_id(ファイル名(複合機のMACアドレス+時刻/スタンプ))
構文: {best:jcf_id}

変数: job_id (複合機のジョブID)
構文: {best:job_id}

変数: mac(複合機のMACアドレス)
構文: {best:mac}

変数: mfp_address(複合機のIPアドレス)
構文: {best:mfp_address}

変数: num_files(ジョブの一部として送信されたファイルの数)
構文: {best:num_files}

変数: pages(スキャンされたページの数)
構文: {best:pages}

変数: product_id(デバイスのSNMP ID)
構文: {best:product_id}

変数: product_name(デバイスの製造元およびモデル名)
構文: {best:product_name}

変数: user_id(ログインしているユーザーの数字によるID)
構文: {best:user_id}

変数: user_name(複合機のユーザー名)
構文: {best:user_name}

電子メール

変数: body(電子メールの内容)
構文: {email:body}

変数: cc(cc受信者の電子メールアドレス)
構文: {email:cc}

変数: date(メッセージが受信された日時)
構文: {email:date}

変数: from(電子メールの作成者の電子メールアドレス)
構文: {email:from}

変数: in-reply-to(その電子メールが返信先であるメッセージのメッセージID)
構文: {email:in-reply-to}

変数: message-id(メッセージの固有のID)
構文: {email:message-id}

変数: received(メッセージが受信された日時などの、メールサーバーにより生成される追跡情報)
構文: {email:received}

変数: references(その電子メールが返信先であるメッセージのメッセージID。および直前の返信が返信先であったメッセージのメッセージIDなど)。
構文: {email:references}

変数: sender(送信者のIPアドレス)
構文: {email:sender}

変数: subject(メッセージの件名)
構文: {email:subject}

変数: to(メッセージの受信者の電子メールアドレス)
構文: {email:to}

ファイルレベル

変数: fullname(ファイル名と拡張子)
構文: {file:fullname}

変数: name(ファイル名(最後のピリオドの前まで、ファイル拡張子は除く))
構文: {file:name}

変数: ext (ファイル拡張子(最後のピリオド以降))
構文: {file:ext}

変数: size(ファイルのサイズ(バイト数))
構文: {file:size}

ファイルシステム

変数: DesktopDirectory(例:C:\Users\ユーザー名\Desktop)
構文: {fs:DesktopDirectory}

変数: Personal(例:C:\Users\ユーザー名\Documents)
構文: {fs:Personal}

変数: ProgramFiles(例:C:\ProgramFiles)
構文: {fs:ProgramFiles}

変数: LocalApplicationData(例:C:\Users\ユーザー名\AppData\Local)
構文: {fs:LocalApplicationData}

変数: ApplicationData(例:C:\Users\ユーザー名\AppData\Roaming)
構文: {fs:ApplicationData}

変数: CommonApplicationData(例:C:\ProgramData)
構文: {fs:CommonApplicationData}

変数: CommonProgramFiles(例:C:\Program Files\Common Files)
構文: {fs:CommonProgramFiles}

変数: System(例:C:\Windows\System32)
構文: {fs:System}

変数: MyPictures(例:C:\Users\ユーザー名\MyPictures)
構文: {fs:MyPictures}

変数: MyMusic(例:C:\Users\ユーザー名\MyMusic)
構文: {fs:MyMusic}

変数: Favorites(例:C:\Users\ユーザー名\Favorites)
構文: {fs:Favorites}

変数: History(例:C:\Users\ユーザー名\AppData\Local\Microsoft\Windows\History)
構文: {fs:Favorites}

変数: Programs(例:C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs)
構文: {fs:Programs}

変数: Recent(例:C:\Users\ユーザー名\AppData\Local\Microsoft\Windows\Recent)
構文: {fs:Recent}

LPR

変数: host(マシン名)
構文: {lpr:host}

変数: jobname(元のファイル名)
構文: {lpr:jobname}

変数: jobnumber(印刷ジョブの固有の番号)
構文: {lpr:jobnumber}

変数: print(プロトコルで送信されるファイル名)
構文: {lpr:print}

変数: queue(指定されたキュー名)
構文: {lpr:queue}

変数: source(ソースファイルの名前)
構文: {lpr:source}

変数: user(ログインしたユーザーのレベル)
構文: {lpr:user}

変数: user(ログインしたユーザーのレベル)
構文: {lpr:user}

SMTP

変数: from(送信者のメールボックス(必ずしも送信者の電子メールアドレスでなくてもよい)。メールボックスアドレスは、山かっこで囲まれます(例:<user@example.com>)
構文: {smtp:from}

変数: rcpt(受信時の宛先メールボックスを1人の受信者に対して1つ指定。これは、To、CC、およびBCCのすべてのメールボックスに対して設定されます)
構文: {smtp:rcpt}

ユーザー

変数: domain(Windowsのドメイン名)
構文: {user:domain}

変数: name(Windowsのログインユーザー名)
構文: {user:name}

メタデータグループ

以下のメタデータグループがページレベルのメタデータとして作成されます。

注釈

変数: {annotate:variable}

構文: {annotate:variable[]}

例: {annotate:date[5]} - 5ページ目で「date」メタデータを検出

高度なベイツスタンプ

変数: {bates:variable}

構文: {bates:variable[]}

例: {bates:counter[3]} - 3ページ目で「counter」メタデータを検出

高度なOCR

変数: {ocr:zone.variable}

構文: {ocr:zone.variable[]}

例: {ocr:name[]} - ドキュメント内の「name」ゾーンを検出

バーコード処理(標準)

変数: {bar1:zone.variable}

構文: {bar1:zone.variable[]}

例: {bar1:zone.128[2]} 2ページ目で「128」ゾーンを検出

バーコード処理(2D)

変数: {bar2:zone.variable}

構文: {bar2:zone.variable[]}

例: {bar2:zone.128[2]} 2ページ目で「128」ゾーンを検出