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

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

15.07.2010, 19:13. Показов 2025. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru