Ответ 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 таким образом, поэтому я бы не придумал свой ответ без него.