powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Регулярное выражение
17 сообщений из 17, страница 1 из 1
Регулярное выражение
    #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
Регулярное выражение
    #38169587
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обязательно регулярку? Тут же с InStr проще.
...
Рейтинг: 0 / 0
Регулярное выражение
    #38169602
Гость3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyОбязательно регулярку? Тут же с InStr проще.
Угу, обязательно
...
Рейтинг: 0 / 0
Регулярное выражение
    #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
Регулярное выражение
    #38170518
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
objRegExp.Pattern = "<FoxPBCLR>([\s\S]*)</FoxPBCLR>"

?
...
Рейтинг: 0 / 0
Регулярное выражение
    #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
Регулярное выражение
    #38170973
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гость3,
Код: vbnet
1.
.pattern = "<FoxPBCLR>([\s\S]+?)</FoxPBCLR>"
...
Рейтинг: 0 / 0
Регулярное выражение
    #38170999
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
objRegExp.Pattern = "(<FoxPBCLR>\b(?=</FoxPBCLR>)).*"
...
Рейтинг: 0 / 0
Регулярное выражение
    #38171006
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотищаГость3,
Код: vbnet
1.
.pattern = "<FoxPBCLR>([\s\S]+?)</FoxPBCLR>"

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

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



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

Этот паттерн сгенерирует ошибку, здесь не может быть вопросительного знака.Не проверил - не ... обгоняй. Рабочий паттерн.
...
Рейтинг: 0 / 0
Регулярное выражение
    #38171052
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скукотишаAntonariyпропущено...
Этот паттерн сгенерирует ошибку, здесь не может быть вопросительного знака.Не проверил - не ... обгоняй. Рабочий паттерн.хмм, а какой здесь смысл вопросительного знака? я думал, он тут квантификатором может быть, а квантификатор уже задан, это +.
...
Рейтинг: 0 / 0
Регулярное выражение
    #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
Регулярное выражение
    #38171063
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это что ж за говнософт такие дикие логи делает?
...
Рейтинг: 0 / 0
Регулярное выражение
    #38171396
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Antonariy,
> хмм, а какой здесь смысл вопросительного знака? я думал, он тут квантификатором может быть, а квантификатор уже задан, это +.

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

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


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