Я пытаюсь разделить эту строку в PHP:
11.11.11.11 - - [25/Jan/2000:14:00:01 +0100] "GET /1986.js HTTP/1.1" 200 932 "http://domain.com/index.html" "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 GTB6"
Как может разделить это на IP, дату, метод HTTP, доменное имя и браузер?
Этот формат журнала похож на объединенный формат журнала Apache . Попробуйте это регулярное выражение:
/^(\S+) \S+ \S+ \[([^\]]+)\] "([A-Z]+)[^"]*" \d+ \d+ "[^"]*" "([^"]*)"$/m
Соответствующие группы следующие:
Но домен не перечислено там. Вторая строка в кавычках - это значение Referer .
Самым важным фактором является рассмотрение алгоритма отправки метода. При использовании статических языков каждому методу обычно назначается индекс. Имена, которые мы видим в источнике, фактически не используются во время выполнения и находятся в источнике в целях читаемости. Естественно, такие языки, как java, сохраняют их и делают доступными в отражении, но в терминах, когда вызывается метод, они не используются. Я оставлю размышления и обязательства вне этой дискуссии. Это означает, что при вызове метода runtmne просто использует смещение для поиска таблицы и вызова. Динамический язык, с другой стороны, использует имя функции для поиска карты, а затем вызывает указанную функцию. Хэш-карта всегда будет медленнее, чем поиск индекса в массиве.
-121--3204933-Также можно попробовать
<ListView
.
.
ItemTemplate="{StaticResource CustomerDataTemplate}"
.
.
/>
, где CustomerDataTemplate является классом DataTemplate for Customer...
-121--2248095-Необходимо получить учебное пособие по регулярным выражениям. Но вот ответ:
if (preg_match('/^(\S+) \S+ \S+ \[(.*?)\] "(\S+).*?" \d+ \d+ "(.*?)" "(.*?)"/', $line, $m)) {
$ip = $m[1];
$date = $m[2];
$method = $m[3];
$referer = $m[4];
$browser = $m[5];
}
Берегитесь, это не имя домена в журнале, а HTTP-ссылка.