Какое регулярное выражение может использоваться для фильтрации сообщений dalvikvm AND dalvikvm-heap из логарифма

Используя эту ссылку, мне удалось создать фильтр с помощью регулярного выражения (?!dalvikvm\b)\b\w+ чтобы отфильтровать сообщения с тегом dalvikvm , но я попробовал несколько вариантов регулярного выражения, например (?!dalvikvm-heap\b)\b\w+ , (?!dalvikvm\\-heap\b)\b\w+ , (?!dalvikvm[-]heap\b)\b\w+ , и многие другие, и я не могу показаться Избавиться от сообщений dalvikvm-heap . В идеале я хотел бы отфильтровать их обоих, но я еще не понял, что часть из них тоже.

Любая помощь будет оценена по достоинству.

Solutions Collecting From Web of "Какое регулярное выражение может использоваться для фильтрации сообщений dalvikvm AND dalvikvm-heap из логарифма"

^(?!dalvikvm) используйте ^(?!dalvikvm) в поле тега. Это покажет только те сообщения, чей тег не начинается с «dalvikvm».

Ниже приведены сведения о том, как это работает; Вы можете пропустить их, если вас это не интересует. Чтобы начать, вы должны помнить, что вопрос: «Соответствует ли эта строка регулярному выражению?» На самом деле означает: «Есть ли какая-либо позиция в этой строке, где регулярное выражение совпадает?»

Трудность в отношении (?!x) отрицательных утверждений заключается в том, что они соответствуют везде, где следующая часть строки не соответствует x : но это верно для каждого места в строке «dalvikvm», кроме начала. Сообщение в блоге, которое вы связали, добавляет a \b в конец, чтобы выражение соответствовало только месту, которое не только до «dalvikvm», и является границей слов. Но это все равно будет соответствовать, потому что конец строки является границей слов, и после нее не будет «dalvikvm». Таким образом, сообщение в блоге добавляет \w+ после него, чтобы сказать, что после границы слова должно быть больше символов слова.

Он работает именно в этом случае, но это немного странный способ создания регулярного выражения, и его относительно дорого оценить. И как вы заметили, вы не можете приспособить его к (?!dalvikvm-heap\b)\b\w+ . «-» – это неглавный символ, поэтому сразу после него есть граница слова, за которой следуют символы слова, а не «dalvikvm-heap», поэтому регулярное выражение совпадает с этим пунктом.

Вместо этого я использую ^ , который совпадает только в начале строки, вместе с отрицательным утверждением. В общем случае регулярное выражение совпадает только в начале строки, и только тогда, если за началом строки не следует «dalvikvm». Это означает, что он не будет соответствовать «dalvikvm» или «dalvikvm-heap». Это также дешевле, потому что механизм регулярных выражений знает, что он может только совпадать с самого начала.

Создавая регулярное выражение таким образом, вы можете отфильтровать несколько тегов, просто соединяя их. Например, ^(?!dalvikvm)(?!IInputConnectionWrapper) отфильтрует теги, которые начинаются с «dalvikvm» или «IInputConnectionWrapper», потому что начало строки не должно сопровождаться первым, а за ним не следует второй ,

Кстати, спасибо за вашу ссылку. Я не понимал, что вы можете использовать фильтры logcat таким образом, поэтому я бы не придумал свой ответ без него.