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

Regex 用于匹配查询字符串的正则表达式,regex,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)" 我可以从日志行“

我有一个日志文件,它的日志与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=A10001837E58D4&game=TapFish HTTP/1.1”中分离此字符串

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


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

使用负前瞻排除邻居:

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

使用负前瞻排除邻居:

for line in logfile:
    match = re.search("GET /gameState?type=(?!neighbor)", line")
可以使用来匹配不包含子字符串的行:

.+GET /gameState\?type=(?!neighbor).+
可以使用来匹配不包含子字符串的行:

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

我不确定我是否理解了您的所有限制,但这应该是可行的:

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

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

我不确定我是否理解了所有约束条件,但这应该是可行的:

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

如果它在
gameState
之后的任何地方发现
type=neighbor
,并且仅当
neighbor
位于单词边界(
type=neighbor
是可以的),则基本上不匹配。

这与
type=/code>之后的内容不匹配。(Lookaheads不参与比赛。)type=后面的内容不匹配这与
type=
后面的内容不匹配。(Lookaheads不参与比赛。)type=之后的内容不匹配取决于他试图进行的比赛,最好使用
+GET/gameState\?type=(?!neighbor\b)。+
\b
会在单词边界处进行匹配,如果像“邻域”这样的内容是一个很好的匹配,这可能会很有用。尽管如此,答案本身可能是正确的;)当我们有一个参数类型时,它确实可以正常工作,但是我想匹配那些没有type=参数的URL。像下面的URL“GET/gameState”一样,根据他试图进行的匹配,最好使用
+GET/gameState\?type=(?!neighbor\b)。+
\b
会在单词边界处进行匹配,如果像“邻域”这样的内容是一个很好的匹配,这可能会很有用。尽管如此,答案本身可能是正确的;)当我们有一个参数类型时,它确实可以正常工作,但是我想匹配那些没有type=参数的URL。如下面的URL“GET/gameState”