Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
4 / 4 / 1
Регистрация: 08.07.2010
Сообщений: 29

Regex для лог файла веб-сервера

15.07.2010, 19:13. Показов 2066. Ответов 4

Студворк — интернет-сервис помощи студентам
Есть две строки (которые повторяются 10 000 раз) но дело не в том
C#
1
2
 //string string1 = @"2010-06-25 20:58:11 fe80::a4a1:7534:68bd:251%10 POST /webservices/ProductClientService.asmx - 80 SC\login777 fe80::a4a1:7534:68bd:251%10 - 200 0 0 577";
            string string1 = @"2010-06-25 05:13:52 10.4.4.101 POST /SPACE1/ISwitchMemberCtxSvcFacade.rem - 80 - 10.4.4.63 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+5.1.2600.196608;+MS+.NET+Remoting;+MS+.NET+CLR+2.0.50727.3607+) 401 2 5 171";
я построил маке по которому эти строки будут разбиваться на подстроки
C#
1
Regex theReg = new Regex(@"(?<a>([-\d]+)\s)+(?<b>([:\d]+)\s)+(?<c>([\d\.]+|[\w:%]+)\s)+(?<d>(\w+)\s)+(?<g>/(\w+)/)+(?<e>(\w+\.\w+)\s)+(?<o>(-)\s)+(?<i>(\d+)\s)+(?<t>([\S+]+|[\w-]+)\s)+(?<n>([\d\.]+|[\w:%]+)\s)+(?<AAA>(.+?\+){5})+(?<m>(.+?;){1})+(?<BBB>(.+?;){1})+(?<CCC>(\S+)\s)+(?<w>(\S+)\s)+(?<s>(\S)\s)+(?<k>(\S)\s)+(?<z>(\S+))");
Разница в строках если вы увидели то вот такая: Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+5.1.2600.196608;+MS+.NET+Remoting;+MS+.NET+CLR+2.0.50727.3607+) или просто "-" мне по нужно добавить
C#
1
Regex theReg = new Regex(@"(?<a>([-\d]+)\s)+(?<b>([:\d]+)\s)+(?<c>([\d\.]+|[\w:%]+)\s)+(?<d>(\w+)\s)+(?<g>/(\w+)/)+(?<e>(\w+\.\w+)\s)+(?<o>(-)\s)+(?<i>(\d+)\s)+(?<t>([\S+]+|[\w-]+)\s)+(?<n>([\d\.]+|[\w:%]+)\s)+      ([(?<AAA>(.+?\+){5})+(?<m>(.+?;){1})+(?<BBB>(.+?;){1})+(?<CCC>(\S+)\s)]+|[-\w+]+\s+               (?<w>(\S+)\s)+(?<s>(\S)\s)+(?<k>(\S)\s)+(?<z>(\S+))");
Помогите пожалуйста целый день уже долблюсь, вот полный исходник программы
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
using System;
using System.Text.RegularExpressions;
using System.Collections.Generic;
using System.IO;
using System.Text;
 
namespace Programming_CSharp
{
    class Test
    {
 
        public static void Main()
        {
            //string string1 = @"2010-06-25 20:58:11 fe80::a4a1:7534:68bd:251%10 POST /webservices/ProductClientService.asmx - 80 SC\login777 fe80::a4a1:7534:68bd:251%10 - 200 0 0 577";
            string string1 = @"2010-06-25 05:13:52 10.4.4.101 POST /SPACE1/ISwitchMemberCtxSvcFacade.rem - 80 - 10.4.4.63 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+5.1.2600.196608;+MS+.NET+Remoting;+MS+.NET+CLR+2.0.50727.3607+) 401 2 5 171";
            Regex theReg = new Regex(@"(?<a>([-\d]+)\s)+(?<b>([:\d]+)\s)+(?<c>([\d\.]+|[\w:%]+)\s)+(?<d>(\w+)\s)+(?<g>/(\w+)/)+(?<e>(\w+\.\w+)\s)+(?<o>(-)\s)+(?<i>(\d+)\s)+(?<t>([\S+]+|[\w-]+)\s)+(?<n>([\d\.]+|[\w:%]+)\s)+(?<AAA>(.+?\+){5})+(?<m>(.+?;){1})+(?<BBB>(.+?;){1})+(?<CCC>(\S+)\s)+(?<w>(\S+)\s)+(?<s>(\S)\s)+(?<k>(\S)\s)+(?<z>(\S+))");
           
            MatchCollection theMatches = theReg.Matches(string1);
 
            foreach (Match theMatch in theMatches)
                if (theMatch.Length != 0)
                {
                    Console.WriteLine("data: {0}", theMatch.Groups["a"]);
                    Console.WriteLine("time: {0}", theMatch.Groups["b"]);
                    Console.WriteLine("s-ip: {0}", theMatch.Groups["c"]);
                    Console.WriteLine("cs-method: {0}", theMatch.Groups["d"]);
                    Console.WriteLine("cs-uri-stem: {0}", theMatch.Groups["g"]);
                    Console.WriteLine("cs-uri-query: {0}", theMatch.Groups["e"]);
                    Console.WriteLine("s-port: {0}", theMatch.Groups["o"]);
                    Console.WriteLine("cs-username: {0}", theMatch.Groups["i"]);
                    Console.WriteLine("c-ip: {0}", theMatch.Groups["t"]);
                    Console.WriteLine(" cs(User-Agent): {0}", theMatch.Groups["n"]);
                    Console.WriteLine(" a: {0}", theMatch.Groups["AAA"]);
                    Console.WriteLine("OC: {0}", theMatch.Groups["m"]);
                    Console.WriteLine(" b: {0}", theMatch.Groups["BBB"]);
                    Console.WriteLine(" c: {0}", theMatch.Groups["CCC"]);
                    Console.WriteLine("CLR: {0}", theMatch.Groups["v"]);
                    Console.WriteLine("sc-status: {0}", theMatch.Groups["w"]);
                    Console.WriteLine("sc-substatus : {0}", theMatch.Groups["s"]);
                    Console.WriteLine("sc-win32-status : {0}", theMatch.Groups["k"]);
                    Console.WriteLine("time-taken: {0}", theMatch.Groups["z"]);
                }
            Console.ReadKey();
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2010, 19:13
Ответы с готовыми решениями:

Парсим charset веб страниц (RegEx)
Пример Input : text/html; charset='UTF-8' text/html; charset=&quot;UTF-8&quot; text/html; charset=UTF-8 Пример Output: UTF-8 ...

Regex: Как вытащить ID'ы в массив строк из ответа от сервера
Как вытащить ID'ы в массив строк из ответа от сервера, например: , , , Где - ID'ы, которые надо вытащить. Где...

Создать программу анализа лог-файла прокси-сервера
Создать программу анализа лог-файла прокси-сервера, содержащего в каждой строке информацию о клиенте прокси-сервера, запрашиваемом адресе,...

4
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
15.07.2010, 22:58
Используйте теги разметки, ну ничего ж не прочитать. А чем помочь? Что именно не получается у вас? Написать регулярку?
0
15 / 15 / 1
Регистрация: 01.07.2010
Сообщений: 33
16.07.2010, 00:22
Я понимаю, когда regexp-ы используются для поиска номера телефона или e-mail-а, но то, что ты пытаешься сделать это же ужас. Ну представь, как это можно отладить? Ведь ошибка в одном символе, и ты будешь ее вылавливать неделями. Напиши простейший парсер, для твоих строк, и никаких проблем не будет.
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
16.07.2010, 02:13
Цитата Сообщение от nop Посмотреть сообщение
(?<w>(\S+)\s)+(?<s>(\S)\s )+(?<k>(\S)\s)+(?<z>(\S+)
Подобных выражений в вашем паттерне - куча
Подчеркнутое означает:
"Найти подстроку, содержащую любые символы, кроме пробельных, заканчивающуюся одним пробельным. Такое повторение возможно от 1 до бесконечности раз"
И посмотрите на следующее
Цитата Сообщение от nop Посмотреть сообщение
(?<w>(\S+)\s)+(?<s>(\S)\s )+(?<k>(\S)\s)+(?<z>(\S+)
Тоже самое
Так вот, первое выражение (?<s>...) может полностью поглатить второе, если вдруг окажется, что второе можно "отодвинуть вперед"
+ (плюсик) в данном случае работает по максимальному, то есть сначала "забирает" все что можно, а потом начинает по немногу отдавать следующему выражению. Наверно вы не этого хотите
Если с рег.выр. плаваете, может другие способы рассмотреть, например выше предложенные?
0
 Аватар для s-kvv
76 / 73 / 9
Регистрация: 09.06.2010
Сообщений: 206
18.07.2010, 09:48
Нашел ошибку в своем оъяснении
В рег.выр. не трудно запутаться

Цитата Сообщение от s-kvv Посмотреть сообщение
"Найти подстроку, содержащую любые символы, кроме пробельных, заканчивающуюся одним пробельным. Такое повторение возможно от 1 до бесконечности раз"
Заменяем на
"Найти подстроку, содержащую любой символ (один), кроме пробельного, за которым следует пробельный (тоже один). Такое повторение возможно от 1 до бесконечности раз"

Остальное как было
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.07.2010, 09:48
Помогаю со студенческими работами здесь

Загрузка лог-файла веб-сервера в БД
Доброго времени суток всем форумчанам! Выполняю я сейчас лабу по веб-программированию в универе. Не стану объяснять суть задания своими...

Анализатор лог-файла сервера apache, позволяющий отображать количество показов
Написать программу анализирующую лог файл сервера apache, позволяющую отображать кол-во показов каждой страницы. Страницы...

Анализатор лог-файла сервера apache, позволяющий отображать количество запросов с заданного IP
Я на первом курсе и ничего не понимаю в этом( Написать программу анализирующую лог файл сервера apache, позволяющую отображать кол-во...

Синглтон для лог файла!
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;limits&gt; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;fstream&gt; using namespace...

Посоветуйте ОС для веб сервера
Уважаемые участники форума. Прошу помощи в выборе операционки для веб сервера. У меня есть два вопроса и одно пожелание =) Вопросы: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru