Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Регулярное выражение / 17 сообщений из 17, страница 1 из 1
28.02.2013, 14:00
    #38169549
Гость3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Привет всем!

Подскажите, есть лог файл такого вида:

Код: xml
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.
3684   - 2013-INFO 3831 CLR.h:334: Poll - ---------- DB Poll get ----------
3684   - 2013 INFO 3831 CLRDB.h:335: PollDB - 
3684   - 2013 INFO 4117 FoxPB.cpp:9: main - 

<FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>

368   - 2013 DBT/Ora: Cannot connect to database! : ORA-12541: TNS:no listener



Необходимо на vbscript написать регулярное выражение которое бы показывало содержимое тегов <FoxPBCLR></FoxPBCLR>
Такой вот код не работает:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Dim strContents, objFSO, objFile, objReadFile, colMatch
Dim objRegExp, colMatches

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("C:\\Main.log")
If objFile.Size > 0 Then
    Set objReadFile = objFSO.OpenTextFile("C:\\Main.log", 1)
    strContents = objReadFile.ReadAll
    objReadFile.Close
Else
End If

Set objRegExp = New RegExp
objRegExp.Pattern = "|<FoxPBCLR[^>]*>(.*)</FoxPBCLR>|gmis"

' Check our string
Set colMatches = objRegExp.Execute(strContents)
For Each colMatch in colMatches
	MsgBox colMatch.Value
Next
...
Рейтинг: 0 / 0
28.02.2013, 14:11
    #38169587
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Обязательно регулярку? Тут же с InStr проще.
...
Рейтинг: 0 / 0
28.02.2013, 14:18
    #38169602
Гость3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
AntonariyОбязательно регулярку? Тут же с InStr проще.
Угу, обязательно
...
Рейтинг: 0 / 0
01.03.2013, 03:50
    #38170424
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Гость3,
где такой дикий паттерн нашёл ? )))

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set objRegExp = New RegExp
with objRegExp
  .global = true ' если надо найти не только первое вхождение
  .pattern = "<FoxPBCLR>([\s\S]+)</FoxPBCLR>"

  dim m
  for each m in .execute(strContents)
    Debug.Print m.submatches(0)
  next
  set m = nothing
end with
set objRegExp = nothing


...
Рейтинг: 0 / 0
01.03.2013, 09:22
    #38170518
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Код: vbnet
1.
objRegExp.Pattern = "<FoxPBCLR>([\s\S]*)</FoxPBCLR>"

?
...
Рейтинг: 0 / 0
01.03.2013, 13:56
    #38170942
Гость3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
скукотищаГость3,
где такой дикий паттерн нашёл ? )))

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set objRegExp = New RegExp
with objRegExp
  .global = true ' если надо найти не только первое вхождение
  .pattern = "<FoxPBCLR>([\s\S]+)</FoxPBCLR>"

  dim m
  for each m in .execute(strContents)
    Debug.Print m.submatches(0)
  next
  set m = nothing
end with
set objRegExp = nothing




Спасибо за помощь.
А вот еще одна ситуация например когда лог такой:
Код: xml
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.
47.
48.
3684   - 2013-INFO 3831 CLR.h:334: Poll - ---------- DB Poll get ----------
3684   - 2013 INFO 3831 CLRDB.h:335: PollDB - 
3684   - 2013 INFO 4117 FoxPB.cpp:9: main - 

<FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>

368   - 2013 DBT/Ora: Cannot connect to database! : ORA-12541: TNS:no listener
<FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>



То код вернет две xml с текстом посредине:
Код: xml
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.
 <FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>

368   - 2013 DBT/Ora: Cannot connect to database! : ORA-12541: TNS:no listener
<FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>



А как можно исключить данный текст?
Код такой:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Set objRegExp = New RegExp
with objRegExp
  .global = true ' если надо найти не только первое вхождение
  .pattern = "<FoxPBCLR>([\s\S]+)</FoxPBCLR>"
'
  dim m
  for each m in .execute(strContents)
    Debug.Print m.submatches(0)
  next
  set m = nothing
end with
set objRegExp = nothing
...
Рейтинг: 0 / 0
01.03.2013, 14:12
    #38170973
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Гость3,
Код: vbnet
1.
.pattern = "<FoxPBCLR>([\s\S]+?)</FoxPBCLR>"
...
Рейтинг: 0 / 0
01.03.2013, 14:25
    #38170999
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Код: vbnet
1.
objRegExp.Pattern = "(<FoxPBCLR>\b(?=</FoxPBCLR>)).*"
...
Рейтинг: 0 / 0
01.03.2013, 14:29
    #38171006
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
скукотищаГость3,
Код: vbnet
1.
.pattern = "<FoxPBCLR>([\s\S]+?)</FoxPBCLR>"

Этот паттерн сгенерирует ошибку, здесь не может быть вопросительного знака.
...
Рейтинг: 0 / 0
01.03.2013, 14:32
    #38171012
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Antonariy
Код: vbnet
1.
objRegExp.Pattern = "(<FoxPBCLR>\b(?=</FoxPBCLR>)).*"

Ой, это не сработает, VBScript.RegExp не знает про lookahead.
...
Рейтинг: 0 / 0
01.03.2013, 14:35
    #38171017
Гость3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
скукотищаГость3,
Код: vbnet
1.
.pattern = "<FoxPBCLR>([\s\S]+?)</FoxPBCLR>"



Все работает, спасибо большое)
...
Рейтинг: 0 / 0
01.03.2013, 14:36
    #38171019
скукотиша
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
AntonariyскукотищаГость3,
Код: vbnet
1.
.pattern = "<FoxPBCLR>([\s\S]+?)</FoxPBCLR>"

Этот паттерн сгенерирует ошибку, здесь не может быть вопросительного знака.Не проверил - не ... обгоняй. Рабочий паттерн.
...
Рейтинг: 0 / 0
01.03.2013, 14:50
    #38171052
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
скукотишаAntonariyпропущено...
Этот паттерн сгенерирует ошибку, здесь не может быть вопросительного знака.Не проверил - не ... обгоняй. Рабочий паттерн.хмм, а какой здесь смысл вопросительного знака? я думал, он тут квантификатором может быть, а квантификатор уже задан, это +.
...
Рейтинг: 0 / 0
01.03.2013, 14:51
    #38171054
Гость3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
Коллеги, простите, забыл продумать еще одну ситуацию.
В логе может быть открывающий тег <FoxPBCLR> а после него стоять текст:

Код: xml
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.
<FoxPBCLR> 
3684   - 2013-INFO 3831 CLR.h:334: Poll - ---------- DB Poll get ----------
3684   - 2013 INFO 3831 CLRDB.h:335: PollDB - 
3684   - 2013 INFO 4117 FoxPB.cpp:9: main - 

<FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>

368   - 2013 DBT/Ora: Cannot connect to database! : ORA-12541: TNS:no listener



Когда такая ситуация надо вернуть:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<FoxPBCLR>  <FoxPBBaseFeed>
    <Errors max_consecutive_errors=5 />
    <Stats received="48" sent="0" total_errors="0" consecutive_errors="0" />
  </FoxPBBaseFeed>
  <CLRConn>
    <MQDetails qmanager="MQ" channel="CLI" connection="dev" tradesin="01" tradesout="03" />
    <MQStats msgOutCount="4" />
  </CLRConn>
<CLRDBPoll>
   <StoredProcedure name="cl" />
   <Stats messagesSent="1" tradesSkipped="0" tradeUpdateFailures="3" />
   <PollCount>1</PollCount>
   <PriorityRequestCount>1</PriorityRequestCount>
   <PriorityRequestSentCount>1</PriorityRequestSentCount>
</CLRDBPoll><CLRDBPoll>
   <StoredProcedure name="get" />
   <Stats messagesSent="0" tradesSkipped="0" tradeUpdateFailures="0" />
   <PollCount>614</PollCount>
   <PriorityRequest>0</PriorityRequest>
   <PriorityRequest2>0</PriorityRequest2>
</CLRDBPoll><CLRDBPollComplete><StoredProcedure name="get" /><Stats tradesProcessed="0" tradesSkipped="0" tradeFailed="0" /></CLRDBPollComplete></FoxPBCLR>
...
Рейтинг: 0 / 0
01.03.2013, 14:57
    #38171063
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
это что ж за говнософт такие дикие логи делает?
...
Рейтинг: 0 / 0
01.03.2013, 18:30
    #38171396
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
> Antonariy,
> хмм, а какой здесь смысл вопросительного знака? я думал, он тут квантификатором может быть, а квантификатор уже задан, это +.

У vbscript.regexp по-умолчанию "жадное" поведение.
<FoxPBCLR>([\s\S]+)</FoxPBCLR> - всё между первым вхождением <FoxPBCLR> и последним вхождением </FoxPBCLR>
<FoxPBCLR>([\s\S]+?)</FoxPBCLR> - всё между первым вхождением <FoxPBCLR> и первым вхождением </FoxPBCLR>
...
Рейтинг: 0 / 0
01.03.2013, 18:36
    #38171401
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярное выражение
> Гость3,
> Коллеги, простите, забыл продумать еще одну ситуацию.
> В логе может быть открывающий тег <FoxPBCLR> а после него стоять текст:

Там уже искали ?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Регулярное выражение / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]