ETag Регулярные выражения - PullRequest
0 голосов
/ 26 августа 2009

Я заметил, что Feedzirra использует это регулярное выражение для получения ETag из заголовка ответа:

/.*ETag:\s(.*)\r/

Лично я написал бы это:

/ETag:\s(.*)\n/

Вот вопросы:

  1. Почему он ставит. * В начале, даже если он не нужен (\ A не указан)?
  2. Почему он использует \ r вместо \ n? В чем разница?

Ответы [ 4 ]

2 голосов
/ 26 августа 2009
  1. Полнота, смею сказать. Это не часть захвата. Однако может быть неявное начало привязки строки, в зависимости от языка и реализации, и в этом случае это может быть необходимо.
  2. Спецификация HTTP говорит, что HTTP должен использовать "\r\n" в качестве окончания строки. В большинстве языков программирования только "\n" считается окончанием строки. \r гарантирует, что \ r не будет проглочен внутри .*, что приведет к ошибочным пробелам в конце захвата.
1 голос
/ 26 августа 2009

Давайте взглянем на HTTP-спецификацию :

Поле заголовка ETag определяется как:

ETag = "ETag" ":" entity-tag

Правильный тег определяется как:

entity-tag = [ weak ] opaque-tag
weak       = "W/"
opaque-tag = quoted-string

А в кавычках определяется как:

quoted-string  = ( <"> *(qdtext | quoted-pair ) <"> )

Таким образом, значение поля заголовка ETag может содержать разрыв строки. И правильное регулярное выражение будет:

/ETag:\s+(?:W\/)?"(?:[ !#-\x7E\x80-\xFF]*|\r\n[\t ]|\\.)*"/
1 голос
/ 26 августа 2009

Я бы согласился. * В начале не нужно

/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
0 голосов
/ 26 августа 2009

HTTP RFC предписывает CRLF перевод строки для сообщения HTTP. Таким образом, \n будет соответствовать дополнительному \r с правильно отформатированным сообщением:

    generic-message = start-line
                      *(message-header CRLF)
                      CRLF
                      [ message-body ]
    start-line      = Request-Line | Status-Line

Тем не менее, я бы сделал это [\r\n] ради надежности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...