什么正则expression式可以用来从logcat中过滤掉dalvikvm和dalvikvm-heap消息

使用这个链接,我可以使用正则expression式(?!dalvikvm\b)\b\w+来创build一个filter,用标签dalvikvm过滤掉消息,但是我尝试了几个正则expression式的变体,比如(?!dalvikvm-heap\b)\b\w+(?!dalvikvm\\-heap\b)\b\w+(?!dalvikvm[-]heap\b)\b\w+等等,我似乎无法摆脱dalvikvm-heap消息。 理想情况下,我想过滤它们,但我还没有想出这一部分。

任何帮助,将不胜感激。

Solutions Collecting From Web of "什么正则expression式可以用来从logcat中过滤掉dalvikvm和dalvikvm-heap消息"

^(?!dalvikvm)在标签字段中使用^(?!dalvikvm) 。 这将只显示标签不是以“dalvikvm”开头的消息。

下面是关于这是如何工作的说明; 如果你不感兴趣,你可以跳过它们。 首先,您必须记住“这个string是否匹配正则expression式?”这个问题。 真正的意思是,“在正则expression式匹配的string中是否有任何位置?

关于(?!x)否定断言的棘手问题是,它们匹配string的下一部分与x不匹配的任何地方,但对于string“dalvikvm”中除开始部分以外的每个地方都是如此。 您链接到的博客文章末尾添加了\b ,以便expression式仅在“dalvikvm”之前的某个位置匹配, 并且是一个字边界。 但这仍然会匹配,因为string的末尾是一个字的边界,并且它之后没有“dalvikvm”。 所以这个博客文章后面加了\w+ ,这个词边界之后就要有更多的文字了。

它正好适用于这种情况,但是做一个正则expression式有点奇怪,评估起来相对昂贵。 正如你所注意到的,你不能适应(?!dalvikvm-heap\b)\b\w+ 。 “ – ”是一个非单词字符,所以在它后面有一个单词边界,接着是单词字符,而不是跟着“dalvikvm-heap”,所以正则expression式在那个点匹配。

相反,我使用^ ,它只在string的开头匹配,连同否定的断言。 总的来说,正则expression式只匹配string的开头,只有当string的开头没有跟随“dalvikvm”。 这意味着它不会匹配“dalvikvm”或“dalvikvm-heap”。 评估也更便宜,因为正则expression式引擎知道它只能在开始时匹配。

通过这种方式制作正则expression式,您可以通过将多个标签放在一起来过滤出多个标签。 例如, ^(?!dalvikvm)(?!IInputConnectionWrapper)将过滤掉以“dalvikvm”或“IInputConnectionWrapper”开头的标记,因为string的开头必须跟在第一个之后,而不是第二个。

顺便说一句,感谢您的链接。 我没有意识到你可以用这种方式使用logcatfilter,所以如果没有它,我就不会拿出我的答案。