1

私は次のピッグラテンフィルターを持っています:

filtered = FILTER raw BY year >= 1960 AND string MATCHES '(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)';

次の文字列に対して次の結果を取得するつもりでした。

a #false .{1}
email@example.com #false .*@.*
http://somesite.com #false .*http.*
www.somesite.com #false .*www.*
12word #false .*[0-9].*
wo12rd #false .*[0-9].*
word12 #false .*[0-9].*
red #true

代わりに、空の結果セットを取得します。

編集:正規表現を次のように更新しました:

'^(?!.*[0-9].*|.{1}|.*@.*|.*www.*|.*http.*)$'

m.buettnerの修正後、空の結果セットを取得し続けます。

4

1 に答える 1

1

2 つの問題があります。まず、Pig Latin では、「文字列内のどこかで一致するだけ」ではなく、文字列全体を一致させる必要があるようです。ただし、否定先読みは文字を消費しないため、文字列全体と一致しません。これは、 を追加するだけで解決できます.*。第二に、ルール.{1}({1}は冗長) では、この 1 文字が文字列内の唯一の文字である必要はありません。したがって、最後の例では、単にrofredを消費し、否定的な先読みを開始します。

したがって、ここに解決策があります:

(?!.*[0-9]|.$|.*@|.*www|.*http).*
于 2012-10-27T18:13:43.357 に答える