我注意到Feedzirra使用此正则表达式从响应头获取ETag:
/.*ETag:\s(.*)\r/
我个人会写这个:
/ETag:\s(.*)\n/
这里有问题:
答案 0 :(得分:2)
"\r\n"
作为行尾。在大多数编程语言中,只有"\n"
被视为行结尾。 \r
确保在.*
内不会吞下\ r \ n,这会在捕获结束时产生错误的空格。答案 1 :(得分:1)
我同意。*开头不需要
/r and /n are different characters.
/r = line ending for old macs
/n = line ending for *nix
/r/n = line ending for windows
probably [\r\n] would be best
答案 2 :(得分:1)
我们来看看HTTP specification:
ETag = "ETag" ":" entity-tag
entitiy-tag定义为:
entity-tag = [ weak ] opaque-tag
weak = "W/"
opaque-tag = quoted-string
quoted-string定义为:
quoted-string = ( <"> *(qdtext | quoted-pair ) <"> )
因此 ETag 标头字段值可能包含换行符。正确的正则表达式是:
/ETag:\s+(?:W\/)?"(?:[ !#-\x7E\x80-\xFF]*|\r\n[\t ]|\\.)*"/
答案 3 :(得分:0)
HTTP
RFC要求CRLF作为HTTP
消息的换行符。因此,\n
会将额外的\r
与格式正确的消息匹配:
generic-message = start-line
*(message-header CRLF)
CRLF
[ message-body ]
start-line = Request-Line | Status-Line
那就是说,为了健壮,我会把它[\r\n]
。