正则表达式名称捕获组不包含一个特定单词

标签 regex

我有这个文本模式,它是 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\.)[^"?]+)

RegEx Demo

(?![^"?]*\bgoogle\.)如果 google. 则为否定前瞻,导致匹配失败在 " 之前领先于当前位置或? .

关于正则表达式名称捕获组不包含一个特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59659973/

相关文章:

java - 如何使用分隔符找到行尾?

c# - 我怎样才能优化这个正则表达式的性能?

python - 只有在两个数字之间时才替换逗号

javascript - 替换以某个符号开头的字符串 n 次

Java - 匹配器在访问组后抛出 IllegalStateException

python - 可以在 Python 3.7 的内置正则表达式中使用 Unicode block (\p{InBasic_Latin}) 来匹配规范等效项

c++ - 正则表达式在 C++ 中不起作用

c - 用于在源代码中搜索的正则表达式(while 循环)

javascript - 正则表达式解析带有转义字符的字符串

python - 如何在 python3 中将复杂的正则表达式编写为字符串?