什么正则表达式可用于从logcat过滤掉dalvikvm和dalvikvm-heap消息

Mat*_*att 22 regex eclipse android logcat

使用这个链接,我能够使用正则表达式来创建过滤器(?!dalvikvm\b)\b\w+与标签过滤掉的消息dalvikvm,但我已经试过正则表达式的一些变化,例如(?!dalvikvm-heap\b)\b\w+,(?!dalvikvm\\-heap\b)\b\w+,(?!dalvikvm[-]heap\b)\b\w+,和许多其他人,我似乎无法摆脱的dalvikvm-heap消息.理想情况下,我想过滤它们,但我还没想出那部分.

任何帮助,将不胜感激.

Dan*_*lme 49

请改用^(?!dalvikvm)标签字段.这将只显示标签不以"dalvikvm"开头的消息.

以下是有关其工作原理的说明; 如果你不感兴趣,你可以跳过它们.首先,你必须记住这个问题,"这个字符串是否匹配正则表达式?" 真的意思是,"这个字符串中有正则表达式匹配的位置吗?"

关于(?!x)否定断言的棘手问题是它们匹配字符串的下一部分不匹配x的任何地方:但是除了开始之外,字符串"dalvikvm"中的每个地方都是如此.您链接到的博客文章\b最后添加了一个,以便表达式仅匹配在"dalvikvm"之前并且是单词边界的位置.但是这仍然会匹配,因为字符串的结尾是一个单词边界,并且它之后没有"dalvikvm".所以博客文章\w+在它之后添加,说在词边界之后必须有更多的单词字符.

它确实适用于这种情况,但这是制作正则表达式的一种奇怪方式,而且评估起来相对昂贵.正如你所注意到的那样,你无法适应它(?!dalvikvm-heap\b)\b\w+." - "是一个非字字符,经过这么立即将它,有一个单词边界,其次是文字字符,而不是其次是"dalvikvm堆",所以正则表达式在该点相匹配.

相反,我使用^,只在字符串的开头匹配,以及否定断言.总的来说,正则表达式只匹配字符串的开头,并且只有在字符串的开头后面没有"dalvikvm"时才会匹配.这意味着它不匹配"dalvikvm"或"dalvikvm-heap".评估也更便宜,因为正则表达式引擎知道它只能在开始时匹配.

以这种方式制作正则表达式,您可以通过将它们放在一起来过滤掉多个标记.例如,^(?!dalvikvm)(?!IInputConnectionWrapper)会过滤掉所有以"dalvikvm"或"IInputConnectionWrapper"开始的标签,因为字符串的开头有没有应遵循的第一和后面不能跟第二.

顺便说一句,谢谢你的链接.我没有意识到你可以用这种方式使用logcat过滤器,所以如果没有它我就不会想出答案.