【问题标题】:What regex can be used to filter out dalvikvm AND dalvikvm-heap messages from the logcat什么正则表达式可用于从 logcat 中过滤掉 dalvikvm 和 dalvikvm-heap 消息
【发布时间】:2013-01-31 16:16:43
【问题描述】:

使用this link 我能够使用正则表达式(?!dalvikvm\b)\b\w+ 创建一个过滤器来过滤带有标签dalvikvm 的消息,但我尝试了正则表达式的几种变体,例如(?!dalvikvm-heap\b)\b\w+(?!dalvikvm\\-heap\b)\b\w+(?!dalvikvm[-]heap\b)\b\w+ 和许多其他人,我似乎无法摆脱 dalvikvm-heap 消息。理想情况下,我想过滤它们,但我还没有弄清楚那部分。

任何帮助将不胜感激。

【问题讨论】:

    标签: android regex eclipse logcat


    【解决方案1】:

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

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

    (?!x) 否定断言的棘手之处在于,它们匹配字符串的下一部分与 x 不匹配的任何位置:但字符串“dalvikvm”中除开头之外的每个位置都是如此。您链接到的博客文章在末尾添加了\b,以便表达式仅在“dalvikvm”之前的位置匹配,这是一个单词边界。但这仍然会匹配,因为字符串的结尾是单词边界,并且后面没有“dalvikvm”。所以博文后面加了\w+,意思是在词的边界后面一定有更多的词字符。

    它确实适用于这种情况,但制作正则表达式的方式有点奇怪,而且评估成本相对较高。正如您所注意到的,您无法将其调整为(?!dalvikvm-heap\b)\b\w+。 “-”是一个非单词字符,所以紧随其后是单词边界,后面是单词字符,而不是“dalvikvm-heap”,所以正则表达式在该点匹配。

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

    以这种方式制作正则表达式,您可以通过将它们放在一起来过滤掉多个标签。例如^(?!dalvikvm)(?!IInputConnectionWrapper) 会过滤掉以“dalvikvm”或“IInputConnectionWrapper”开头的标签,因为字符串的开头不能跟第一个,也不能跟第二个。

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

    【讨论】:

    • 或者,您可以将 tag:^(?!dalvikvm) 放在 LogCat 视图的搜索框中。
    • 如果你想超级正确,你可以使用区分大小写的正则表达式:(?-i)^(?!dalvikvm)
    猜你喜欢
    • 2014-09-22
    • 2012-11-03
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    相关资源
    最近更新 更多