Utilizzare invece ^(?!dalvikvm)
nel campo del tag. Questo mostrerà solo i messaggi il cui tag non inizia con "dalvikvm".
Quanto segue è una nota su come funziona; puoi saltarli se non sei interessato. Per iniziare, devi ricordare che la domanda "Questa stringa corrisponde alla regex?" significa davvero: "C'è qualche posizione in questa stringa in cui la regex corrisponde?"
La cosa complicata delle asserzioni negative (?!x)
è che esse corrispondono ovunque la parte successiva della stringa non corrisponde a x
: ma questo è vero per ogni punto della stringa "dalvikvm" tranne per l'inizio. Il post del blog che hai collegato aggiunge un \b
alla fine in modo che l'espressione corrisponda solo a un posto che non è appena prima "dalvikvm" e è un limite di parole. Ma questo corrisponderebbe ancora, perché la fine della stringa è un limite di parole, e non ha "dalvikvm" dopo di esso. Quindi il post del blog aggiunge il \w+
dopo di esso, per dire che dopo il confine della parola ci devono essere più caratteri di parole.
Funziona esattamente per questo caso, ma è un modo un po 'strano di eseguire un'espressione regolare ed è relativamente costoso da valutare. E come hai notato, non puoi adattarlo a (?!dalvikvm-heap\b)\b\w+
. "-" è un carattere non di parole, quindi immediatamente dopo, c'è un limite di parola, seguito da caratteri di parole, e non seguito da "dalvikvm-heap", quindi l'espressione regolare corrisponde a quel punto.
Invece, io uso ^
, che corrisponde solo all'inizio della stringa, insieme all'asserzione negativa. Nel complesso, la regex corrisponde solo all'inizio della stringa, e solo se l'inizio della stringa non è seguito da "dalvikvm". Ciò significa che non corrisponderà "dalvikvm" o "dalvikvm-heap". È anche più economico da valutare, perché il motore regex sa che può solo corrispondere all'inizio.
Effettuando in questo modo l'espressione regolare, è possibile filtrare più tag semplicemente mettendoli insieme. Ad esempio, ^(?!dalvikvm)(?!IInputConnectionWrapper)
filtrerà i tag che iniziano con "dalvikvm" o "IInputConnectionWrapper", perché l'inizio della stringa non deve essere seguito dal primo e non essere seguito dal secondo.
BTW, grazie per il link. Non mi rendevo conto che potevi usare i filtri logcat in quel modo, quindi non avrei avuto la mia risposta senza di essa.
maledetto sei così bravo con Regex –
In alternativa, puoi inserire tag:^(?! dalvikvm) nella casella di ricerca della vista LogCat. –
E se si desidera essere super-corretti, è possibile utilizzare espressioni regolari con distinzione tra maiuscole e minuscole: (? -i)^(?! dalvikvm) –