22

このリンクを使用して、正規表現を使用(?!dalvikvm\b)\b\w+してタグ付きのメッセージを除外するフィルターを作成できましたが、、、、、および他の多くのdalvikvm正規表現のバリエーションをいくつか試しましたが、メッセージを取り除くことができないようです. 理想的には両方をフィルタリングしたいのですが、その部分もまだわかりません。(?!dalvikvm-heap\b)\b\w+(?!dalvikvm\\-heap\b)\b\w+(?!dalvikvm[-]heap\b)\b\w+dalvikvm-heap

どんな助けでも大歓迎です。

4

1 に答える 1

49

^(?!dalvikvm)代わりにタグ フィールドで使用してください。これにより、タグが「dalvikvm」で始まらないメッセージのみが表示されます。

以下は、これがどのように機能するかについてのメモです。興味がない場合はスキップできます。まず、「この文字列は正規表現と一致しますか?」という質問を覚えておく必要があります。実際には、「正規表現が一致するこの文字列内の位置はありますか?」という意味です。

否定的なアサーションのトリッキーな点(?!x)は、文字列の次の部分が一致しない場合はどこでも一致することxです。しかし、これは文字列 "dalvikvm" の先頭を除くすべての場所に当てはまります。リンク先のブログ投稿\bでは、最後に a を追加して、「dalvikvm」の直前ではなく単語の境界である場所でのみ式が一致するようにします。ただし、文字列の末尾は単語境界であり、その後に「dalvikvm」がないため、これでも一致します。そのため、ブログ投稿では\w+、単語の境界の後にさらに単語の文字が必要であると言うために、その後に追加します。

まさにその場合に機能しますが、正規表現を作成するのは少し奇妙な方法であり、評価するのに比較的コストがかかります。お気づきのように、それを に適応させることはできません(?!dalvikvm-heap\b)\b\w+。「-」は単語以外の文字であるため、その直後に単語境界があり、その後に単語文字が続き、「dalvikvm-heap」が続いていないため、正規表現はその時点で一致します。

代わりに^、文字列の先頭でのみ一致する を、否定的なアサーションと共に使用します。全体として、正規表現は文字列の先頭でのみ一致し、文字列の先頭の後に「dalvikvm」が続いていない場合にのみ一致します。つまり、「dalvikvm」または「dalvikvm-heap」と一致しません。また、正規表現エンジンは最初に一致する可能性があることを認識しているため、評価するのも安価です。

このように正規表現を作成すると、複数のタグを組み合わせるだけで除外できます。たとえば、^(?!dalvikvm)(?!IInputConnectionWrapper)「dalvikvm」または「IInputConnectionWrapper」で始まるタグを除外します。これは、文字列の先頭に最初のタグが続き、2 番目のタグが続いてはならないためです。

ところで、あなたのリンクをありがとう。logcat フィルターをそのように使用できるとは知らなかったので、それがなければ答えは思いつきませんでした。

于 2013-02-13T10:35:45.060 に答える