我有一个正则表达式
url\=\"(?P<url>((.*)))\"\s+exceptions\=\"(?P<exceptions>([^\"]*))\"\s+error\=\"(?P<error>([^\"]*))\"(\s+reputation\=\"(?P<reputation_opt>([^\"]*)))?\s+category\=\"(?P<category>([^\"]*))\"\s+reputation\=\"(?P<reputation>([^\']*))\"\s+categoryname\=\"(?P<categoryname>([^\"]*))\"(\s+content-type\=\"(?P<content_type>([^\"]*))\")?
然而,有时在我的日志文件中捕获url\=\"(?P<url>((.*)))\"
之后的所有内容有时都是可选的,因此我决定在(...)?
之后的所有内容周围添加url\=\"(?P<url>((.*)))\"
。然而,这并不是我想做的事情。我希望捕获整个日志,并且不包含url...
之后的所有内容。
这是我的正则表达式()?
围绕可选块
url\=\"(?P<url>((.*)))\"(\s+exceptions\=\"(?P<exceptions>([^\"]*))\"\s+error\=\"(?P<error>([^\"]*))\"(\s+reputation\=\"(?P<reputation_opt>([^\"]*)))?\s+category\=\"(?P<category>([^\"]*))\"\s+reputation\=\"(?P<reputation>([^\']*))\"\s+categoryname\=\"(?P<categoryname>([^\"]*))\"(\s+content-type\=\"(?P<content_type>([^\"]*))\")?)?
以下是我感兴趣的示例日志条目的一部分:
url="http://media.fastclick.net/w/get.media?sid=15971&tp=5&d=j&t=n" exceptions="" error="" category="178" reputation="unverified" categoryname="Internet Services" content-type="application/x-javascript"
答案 0 :(得分:1)
我将所有组都设为可选,我删除了不必要的捕获组和转义字符:
(?x) # to allow line break, comments in the regex
url=\"(?P<url>.*)\"
(?:\s+exceptions=\"(?P<exceptions>[^\"]*)\")?
(?:\s+error=\"(?P<error>[^\"]*)\")?
(?:\s+reputation=\"(?P<reputation_opt>[^\"]*))?
(?:\s+category=\"(?P<category>[^\"]*)\")?
(?:\s+reputation=\"(?P<reputation>[^\"]*)\")?
(?:\s+categoryname=\"(?P<categoryname>[^\"]*)\")?
(?:\s+content-type=\"(?P<content_type>[^\"]*)\")?
答案 1 :(得分:0)
我遗漏的是?
url\=\"(?P<url>((.*)))\"
以下是答案
url\=\"(?P<url>((.*?)))\"
?帮助.*
非贪婪