我有这个文本模式,它是 Apache 日志:
18.123.117.10 287.153.14.123 [08/Jan/2020:10:16:22 +0000] "GET /sport/home HTTP/1.1" 200 12345 122 "https://www.google.com" "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" eb72d10e0-3f9f-42kf-3di6-ff40hegg49f85 1578478582510 1578478582612
我构建了一个正则表达式来从此日志中提取引用站点,在我们的示例中为 https://www.google.com
:
^(?:[^\"\n]*\"){3}(?<referer>[^\"?]+)
但我需要确保组引用仅在不包含单词时才匹配,例如我想获取所有非 google 的引用。如何编辑此正则表达式以获得此结果?
最佳答案
您可以在正则表达式中使用否定前瞻:
^(?:[^"\n]*"){3}(?<referer>(?![^"?]*\bgoogle\.)[^"?]+)
(?![^"?]*\bgoogle\.)
如果 google.
则为否定前瞻,导致匹配失败在 "
之前领先于当前位置或?
.
关于正则表达式名称捕获组不包含一个特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659973/