Q
負的正則表達式
3
A
回答
1
這是我的模糊思維 - 我的配置文件的其餘部分有問題。
根據本Lim的例子,我想出了一個輸入更易於測試:
input {
stdin { }
}
filter {
if [message] !~ /(.+)/ {
mutate { add_tag => ["blank_message"] }
}
if [noexist] !~ /(.+)/ {
mutate { add_tag => ["tag_does_not_exist"] }
}
}
output {
stdout {debug => true}
}
爲空白消息輸出是:
{
"message" => "",
"@version" => "1",
"@timestamp" => "2014-02-27T01:33:19.285Z",
"host" => "benchmark.example.com",
"tags" => [
[0] "blank_message",
[1] "tag_does_not_exist"
]
}
的輸出與消息內容 「測試消息」 是:
test message
{
"message" => "test message",
"@version" => "1",
"@timestamp" => "2014-02-27T01:33:25.059Z",
"host" => "benchmark.example.com",
"tags" => [
[0] "tag_does_not_exist"
]
}
因此, 「負正則表達式」僅當該字段爲空或該字段不存在時,纔會返回true。
負面正則表達式/(.*)/
只會在該字段不存在時返回true。如果該字段存在(無論是否爲空值),返回值將爲false。
1
下面是我的配置。類型字段不存在,因此,否定表達式返回true。
input {
stdin {
}
}
filter {
if [type] !~ /(.+)/ {
mutate { add_tag => ["aa"] }
}
}
output {
stdout {debug => true}
}
的正則表達式/(.+)/意味着它接受一切,包括空白。因此,當「類型」字段存在時,即使字段值爲空,它也符合正則表達式。因此,在您的示例中,如果remote_ip字段存在,則您的「否定表達式」將始終返回false。
+0
感謝您的幫助 - 它清除了我的想法。不幸的是,你似乎將(。+)與(。*)混淆。 A +需要至少一個字符,而*接受任意數量的字符(包括空白)。我在我的回覆中都包含了這兩個字。 –
相關問題
- 1. 正負號的正則表達式
- 2. 負號匹配的正則表達式
- 3. 的Python小時負正則表達式
- 4. Ruby的正則表達式:負匹配,
- 5. 負數的Java正則表達式?
- 6. Python的正則表達式負
- 7. 負面看法的正則表達式
- 8. C#中的正則表達式,負向倒序表達式
- 9. 正則表達式允許負值
- 10. 負向前看去正則表達式
- 11. Javascript正則表達式負面後顧
- 12. Python正則表達式負面lookbehind
- 13. 負面展望正則表達式
- 14. 負環視正則表達式
- 15. Perl - 正則表達式替換爲負
- 16. 正則表達式爲負先行JSON
- 17. 正則表達式不允許負數
- 18. 正則表達式只允許負數
- 19. 正則表達式負先行
- 20. 負面展望python正則表達式
- 21. 蟒蛇正則表達式負先行
- 22. 正則表達式負號替換?
- 23. 正則表達式與負回顧後
- 24. 正則表達式,負後綴
- 25. PHP正則表達式負向前瞻
- 26. 正則表達式 - 負先行
- 27. 正則表達式:無法做負lookahed
- 28. 正則表達式(正則表達式)
- 29. 正則表達式(正則表達式)
- 30. 正則表達式(正則表達式)
要查看一個字段是否存在,只需使用if [fieldName] {...}',如果不存在if [[fieldName] {...}' – Chro