用于匹配查询字符串的正则表达式

时间:2012-05-03 15:15:33

标签: regex

我有一个日志文件,其日志与Apache日志非常相似

以下是日志行示例

41.13.0.155 - - [03/May/2012:00:00:08 -0700] "GET /gameState?type=udid&udid=A100001837E58D4&game=TapFish HTTP/1.1" 200 38812 - "Dalvik/1.4.0 (Linux; U; Android 2.3.5; GT-B5510 Build/GINGERBREAD)"

我可以将此字符串与日志行"GET /gameState?type=udid&udid=A100001837E58D4&game=TapFish HTTP/1.1"

分开

我想迭代所有行以获取满足以下条件的所有日志行 日志行应该有"GET /gameState?type=[[anything]]",但[[anything]]不应该是'neighbor'

请建议一些正则表达式,它可以匹配上述条件下的字符串

3 个答案:

答案 0 :(得分:3)

您可以使用negative lookahead来匹配不包含子字符串的行:

.+GET /gameState\?type=(?!neighbor).+

答案 1 :(得分:1)

我不确定我是否理解了所有约束,但这应该有效:

.+GET /gameState(?!.*type=neighbor\b).*

如果它type=neighbor之后的任何地方发现gameState,并且仅当neighbor位于字边界(type=neighborhood正常)时,您基本上不匹配。

答案 2 :(得分:0)

使用否定前瞻来排除邻居:

for line in logfile:
    match = re.search("GET /gameState?type=(?!neighbor)", line")