パターンでは、さまざまな検索条件を指定できます。部分的な一致の検索や単語の検索など、複雑な条件を記述して検索できます。
パターン検索には、以下の種類があります。
分類 | 種類 |
---|---|
文字列一致指定 | |
前方一致指定 | |
後方一致指定 | |
任意文字指定 | |
文字間隔指定 | |
部分文字指定 | |
文字範囲指定 | |
数値範囲指定 | |
ワード一致指定 | |
ワード間隔指定 | |
論理積 | |
論理和 | |
否定 |
パターン検索の定義
パターン検索の定義を以下の図に示します。
ポイント
パターンは、二重引用符(")または引用符(')で囲みます。
検索対象文字列における半角英字について大文字・小文字の取扱いを、ルール定義(ANKmixオプション)で指定できます。また、全角英字について大文字・小文字の取扱いを、ルール定義(KNJmixオプション)で指定できます。ANKmixおよびKNJmixオプションの詳細については、「2.9 オプション」を参照してください。
注意
二重引用符(")と引用符(')は混在して使用できません。
パターンの定義
パターンの定義を以下の図に示します。
パターン検索(文字列)の定義を以下の図に示します。
ポイント
検索対象外として取り扱う文字を、ルール定義(SkipCharオプション)で指定できます。SkipCharオプションの詳細については、「2.9 オプション」を参照してください。
要素の値に、指定されたキーワードが含まれるかどうかを調べます。
例
/root/textが示す要素の値に“富士通”という文字列を含むデータを検索します。
/root/text = '富士通'
要素の値の先頭に、指定されたキーワードが存在するかどうかを調べます。
例
/root/textが示す要素の値の先頭が“富士通”という文字列で始まるデータを検索します。
/root/text = '^富士通'
要素の値の末尾に、指定されたキーワードが存在するかどうかを調べます。
例
/root/textが示す要素の値の末尾が“富士通”という文字列で終わるデータを検索します。
/root/text = '富士通$'
要素の値に、任意の文字が入ったキーワードを含んでいるかどうかを調べます。
キーワードに含む任意の文字の指定には、以下の表の4種類を指定できます。
記号 | 意味 | 連続使用 |
---|---|---|
. | 任意の1文字 | ○ |
.? | 任意の0~1文字 | ○ |
.+ | 任意の1文字以上 | × |
.* | 任意の0文字以上 | × |
○:使用可
×:使用不可
注意
連続使用不可な記号を連続して使用した場合は、CEPエンジンの起動に失敗します。
例
/root/textが示す要素の値に“富士”と“会社”という文字列を含み、かつ、その2つの文字列の間の文字数が0文字以上のデータを検索します。
/root/text = '富士.*会社'
参考
任意文字指定は、自由に組み合わせることができます。任意文字指定の組合せと真偽の例を以下の表に示します。なお、以下の表は比較演算子にイコール(=)を指定した場合の結果です。
キーワード例 | データ例 | |||
---|---|---|---|---|
AB | AXB | AYYB | AZZZB | |
'A.' | ○ | ○ | ○ | ○ |
'A.B' | × | ○ | × | × |
'A.?B' | ○ | ○ | × | × |
'A.+B' | × | ○ | ○ | ○ |
'A.*B' | ○ | ○ | ○ | ○ |
'A..?B' | × | ○ | ○ | × |
'A..+B' | × | × | ○ | ○ |
'A..*B' | × | ○ | ○ | ○ |
'A.?.+B' | × | ○ | ○ | ○ |
'A.?.*B' | ○ | ○ | ○ | ○ |
○:真
×:偽
要素の値に、指定された2つのキーワードが指定された文字数以内の間隔をおいて連続して出現するかどうかを調べます。
文字間隔指定の数値に指定できる値は、0~1024です。
注意
文字列検索に文字間隔指定は、一度だけ指定できます。
文字間隔指定の直前または直後に、任意文字指定を記述することはできません。
例
/root/textが示す要素の値に“アルコール”と“濃度”という文字列を含み、かつ、その2つの文字列の間の文字数が10文字以内であるデータを検索します。
/root/text = 'アルコール,10C,濃度'
要素の値に、指定されたキーワードが含まれるかどうかを調べます。キーワードの一部は、複数の文字列のいずれかで構成されます。
注意
指定する文字数によっては、多くのメモリを使用することがあります。メモリ不足の状態では、検索レスポンスが悪化します。なお、メモリオーバーフローを検出した場合は、エラーメッセージが出力され、入力イベントが破棄されます(次の入力イベントの処理を継続します)。
メモリの見積もり方法については、「ユーザーズガイド」の「6.3.4 チューニング」を参照してください。
例
/root/textが示す要素の値に“高田太郎”、“高山太郎”または“高見沢太郎”という文字列を含むデータを検索します。
/root/text = '高(田|山|見沢)太郎'
要素の値に、指定されたキーワードが含まれるかどうかを調べます。キーワードの一部は、指定された範囲の文字のいずれかで構成されます。
文字1の文字コードの値は、文字2の文字コードの値より小さくなければなりません。文字1と文字2はともにASCII文字の1文字でなければなりません。
注意
指定する文字範囲によっては、多くのメモリを使用することがあります。メモリ不足の状態では、検索レスポンスが悪化します。なお、メモリオーバーフローを検出した場合は、エラーメッセージが出力され、入力イベントが破棄されます(次の入力イベントの処理を継続します)。
メモリの見積もり方法については、「ユーザーズガイド」の「6.3.4 チューニング」を参照してください。
例
/root/textが示す要素の値に“classA”、“classB”または“classC”という文字列を含むデータを検索します。
/root/text = 'class[A-C]'
要素の値に、指定されたキーワードが含まれるかどうかを調べます。キーワードの一部は、指定された範囲の数値のいずれかで構成されます。
数値1は数値2より小さくなければなりません。数値1と数値2はともに半角数字でなければなりません。なお、数値1と数値2に指定できる値は、0~999です。
ポイント
数値の前後に文字を指定すると、正しい検索結果が得られます。
注意
指定する数値範囲によっては、多くのメモリを使用することがあります。メモリ不足の状態では、検索レスポンスが悪化します。なお、メモリオーバーフローを検出した場合は、エラーメッセージが出力され、入力イベントが破棄されます(次の入力イベントの処理を継続します)。
メモリの見積もり方法については、「ユーザーズガイド」の「6.3.4 チューニング」を参照してください。
例
/root/textが示す要素の値に“アルコール9%” “アルコール10%”または“アルコール11%”という文字列を含むデータを検索します。
/root/text = 'アルコール[9,11]%'
パターン検索(ワード) の定義を以下の図に示します。
ポイント
単語の区切り文字を、ルール定義(SeparateCharオプション)で指定できます。SeparateCharオプションの詳細については、「2.9 オプション」を参照してください。
ワード検索中に記述できる文字は、単語の区切り文字を除くASCII文字です。
要素の値に、指定されたキーワードと一致する単語が含まれるかどうかを調べます。ワード検索の場合は、区切り文字で区切られた文字列を、単語として識別します。
例
/root/textが示す要素の値に“the”という単語を含むデータを検索します。
/root/text = '\<the\>'
“mother”の“the”は単語の途中にあるため偽となります。
要素の値に、指定された2つのキーワードが指定された単語数以内の間隔をおいて連続して出現するかどうかを調べます。
ワード間隔指定の数値に指定できる値は、0~1024です。
例
/root/textが示す要素の値に“search”と“AsIs”という単語を含み、かつ、その2つの単語の間の単語数が10ワード以内であるデータを検索します。
/root/text = '\<search\>,10W,\<AsIs\>'
注意
ワード検索にワード間隔指定は、一度だけ指定できます。
パターン検索(論理積・論理和・否定)について説明します。
パス式で指定した要素の値が、指定されたすべてのパターンを含むかどうかを調べます。
例
/root/textが示す要素の値に“高速”および“検索”という文字列を両方含むデータを検索します。
/root/text = '高速&検索'
パス式で指定した要素の値が、指定されたどちらかのパターンを含むかどうかを調べます。
例
/root/textが示す要素の値に“高速”または“検索”という文字列を含むデータを検索します。
/root/text = '高速|検索'
要素の値が、指定されたパターンを含まないかどうかを調べます。
例
/root/textが示す要素の値に“高速”という文字列も“検索”という文字列も含まないデータを検索します。
/root/text = '~(高速|検索)'
ポイント
パターン検索には、論理積、論理和、否定を組み合わせて使用できます。このときの評価順序は以下の通りです。
否定
論理積
論理和
括弧記号“(”および“)”を使用して評価順序を指定できます。括弧の中の条件は、優先的に評価されます。
キーワード検索の1つである、文字列による検索では、要素の値が、文字列で指定された値と完全に一致するイベントや大小関係にあるイベントを検索します。文字列による大小比較を行うことができるため、数字と文字とが混在した値の検索に利用できます。
文字列検索の定義を以下の図に示します。
文字列の定義を以下の図に示します。
文字列検索には、完全一致と大小比較の2種類があります。
要素の値と文字列が等しいかどうかを調べます。
例
/root/areaが示す要素の値が“神奈川県”という文字列と等しいデータを検索します。
/root/area == '神奈川県'
要素の値と文字列を文字コード値で文字列の左から右の順に大小比較します。
注意
文字列の完全一致、または大小比較ではパス式の最後に、パス演算子“//”は指定できません。
文字列の完全一致、または大小比較ではパス式の最後に、パス要素“*”は指定できません。
文字列の完全一致、または大小比較では項目式に、“$_”は指定できません。
文字列比較の場合は、XML形式のイベント中の検索対象とする要素の値と、キーワードで指定する文字列の桁数をそろえておく必要があります。
ポイント
検索対象外として取り扱う文字をルール定義(SkipCharオプション)で指定できます。
検索対象文字列における半角英字について大文字・小文字の取扱いを、ルール定義(ANKmixオプション)で指定できます。また、全角英字について大文字・小文字の取扱いを、ルール定義(KNJmixオプション)で指定できます。
各オプションの詳細については、「2.9 オプション」を参照してください。
キーワード検索の1つである、数値による検索では、要素の値から数値部分を抽出し、その値と指定された数値が一致するイベントや大小関係にあるイベントを検索します。要素の値から数値部分を自動的に抽出するため、さまざまな書き方の数値の検索に利用できます。
また、左辺に数値関数を指定して数値と比較することもできます。
数値検索の定義を以下の図に示します。
数値リテラルの定義を以下の図に示します。
数字には、半角文字の0~9までを使って指定します。桁数の制限はありません。
前方および後方の空白文字を除き、数値リテラルに空白文字は記述できません。
要素の値から最初に見つけた上記の形式の文字列を数値として扱います。
整数部に出現するコンマ(,)は無視します。小数点が指定されている場合、それ以降最初に出現した数字以外の文字の前までを小数部とみなします。
例
/doc/moneyが示す要素の値から数値を抜き出し、1000と一致するデータを検索します。
/doc/money = 1000
以下の例では、パス式に指定した要素の値に、複数の数値を含みます。このような場合は、最初に見つけた数値を値とみなします。
イベントA
<money>ABC123,456@789</money>
123456とみなします。
イベントB
<money>123456 7890123</money>
123456とみなします。
イベントC
<money>1,500千円</money>
1500とみなします。
検索データに有効な数値文字列が存在しない場合、その条件は偽となります。
以下の検索対象文字列の場合は、有効な数値文字列が存在しません。
<money></money>
ポイント
キーワードで指定する数値文字と、パス式で指定した要素の値の桁数をそろえる必要はありません。
複数のXML形式のイベント間で要素の値の整数部および小数部ともに桁数をそろえる必要はありません。
イベントA
<money>1000.1</money>
イベントB
<money>2000.05</money>
イベントC
<money>10.5</money>
注意
数値検索ではパス式の最後に、パス演算子“//”は指定できません。
数値検索ではパス式の最後に、パス要素“*”は指定できません。
数値検索では項目式に、“$_”は指定できません。
例
/root/moneyが示す要素の値が、1000より大きいデータを検索します。
/root/money > 1000
参照
val関数の詳細については、「2.8.3.1 val関数」を参照してください。
数字リテラルの詳細については、「2.4.6.2 数値リテラル」を参照してください。