1. ホーム
  2. java

[解決済み] Apache Pig - 複数のマッチ条件でのMATCHES

2022-02-07 10:15:14

質問

のような論理的なマッチング条件を取ろうとしています。

(("Foo" OR "Foo Bar" OR FooBar) AND ("test" OR "testA" OR "TestB")) OR TestZ

を使用して、pig のファイルに対するマッチとしてこれを適用します。

result = filter inputfields by text matches (some regex expression here));

問題は、上記の論理式をmatchesメソッド用の正規表現に変換する方法がわからないことです。

いろいろといじくりまわして、一番近いのはこんな感じです。

((?=.*?\bFoo\b | \bFoo Bar\b))(?=.*?\bTestZ\b)

何かアイデアはありますか?また、可能であればこの変換をプログラムで行うようにしたいのですが。

いくつか例を挙げます。

a - 素早い茶色のフーは怠惰なテストを飛び越えた (これは foo と test を含むのでパスするはずです)

b - the was something going on in TestZ (これはtestZを含むので、これもパスです)

c - the quick brown Foo jumped over the lazy dog (これはFooを含むがtest,testA,testBを含まないので失敗するはずである)

ありがとうございます。

解決方法は?

Pig を使っているので、複雑な正規表現は必要ありません。pig が提供するブール演算子と、いくつかの簡単な正規表現を組み合わせて使うことができます。

T = load 'matches.txt' as (str:chararray);
F = filter T by ((str matches '.*(Foo|Foo Bar|FooBar).*' and str matches '.*(test|testA|TestB).*') or str matches '.*TestZ.*');
dump F;