powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Регулярка
10 сообщений из 10, страница 1 из 1
Регулярка
    #36350447
Zhenek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите. Начал изучать регулярки..

Вот строка :

<a href=http://www.site.ru/add?message&to=ololololo>

нужно вытащить из нее ololololo

Делаю так :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
   Dim regexp As New Regex("to=(.*?)>")
        Dim html As String
        Dim i As Integer
        Dim m As MatchCollection
        html = "<a href=http://www.site.ru/add?message&to=ololololo>"
        m = regexp.Matches(html)
        For i =  0  To m.Count -  1 
            MsgBox(m.Item(i).Value)
        Next

или так :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 Dim regexp As New Regex("to=(^.*?$)>")
        Dim html As String
        Dim i As Integer
        Dim m As MatchCollection
        html = "<a href=http://www.site.ru/add?message&to=ololololo>"
        m = regexp.Matches(html)
        For i =  0  To m.Count -  1 
            MsgBox(m.Item(i).Value)
        Next

Неработает(( верней не так как надо( а второй пример вообще ничего не находит((((
...
Рейтинг: 0 / 0
Регулярка
    #36350530
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первом случае вопросительный знак не нужен, но он ничего и не решает. Что именно не так в этом примере?

Во втором случае не нужны ^ и $, они обозначают соответственно начало и конец строки, а паттерн у вас начинается совсем не с "<a".
...
Рейтинг: 0 / 0
Регулярка
    #36351065
Zhenek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема в том, что он должен в результате выдать :

ololololo

а выдает

ololololo> и все что идет следом.

Пример :

<a href=http://www.site.ru/add?message&to=ololololo>БлабЛабла</a>
Регулярка выдаст

&to=ololololo>БлабЛабла</a> а не ololololo
...
Рейтинг: 0 / 0
Регулярка
    #36351068
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извените, а Regex как подключать чтоб у меня понимало. Я если чесно сутки потратил чтоб написать функции которые делают приблизительно то же.

Вот первая

Код: plaintext
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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
Public Function Poshuk_Vibirayemo(ByVal Vhid As String, ByVal StrokaIzZrazkom As String, Regim As String) As String
    Dim i As Long
    Dim b As Boolean
    Dim s1 As String
    Dim s2 As String
    Dim s3 As String
    Dim q As String
    Dim w As String
    Dim bl1 As String
    Dim bl2 As String
    Dim vh4 As String
    Dim vh3 As String
    Dim vh1 As String
    b = False

Dim sS0 As String
Dim sS1 As String
Dim sS2 As String
Dim sS3 As String
Dim sS4 As String
            sS0 = Vhid
            sS1 = sS0
            vh3 = StrokaIzZrazkom
            w = vh3
            b = False
Cicl2:
       If Trim(w) <> "" Then
         i = InStr(w, ",")
         If i >  1  Then
           q = Left(w, i -  1 )
           w = Trim(Mid(w + " ", i +  1 ))
         Else
           q = w
           b = True
         End If
       i = InStr( 1 , sS1, q, vbTextCompare)
         If i =  0  Then b = False: GoTo Dali2
         bl1 = q
         sS2 = Mid(sS1, i + Len(q))
         sS1 = Mid(sS1, i)
         If b = True Then sS3 = "": GoTo Dali2
Cicl3:
         i = InStr(w, ",")
         If i >  1  Then
           q = Left(w, i -  1 )
           w = Trim(Mid(w + " ", i +  1 ))
         Else
           q = w
           b = True
           bl2 = q
         End If
       i = InStr( 1 , sS2, q, vbTextCompare)
          If i =  0  Then b = False: sS1 = "": GoTo Dali2
          If Len(q) + i -  1  =  0  Then b = False: sS1 = "": GoTo Dali2
          sS2 = Mid(sS2, Len(q) + i)
          sS3 = Left(sS1, Len(sS1) - Len(sS2))
          If b = True Then GoTo Dali2
         GoTo Cicl3
       End If
Dali2:
        If b = True Then
          If Regim = "вибираємо все" Then
             Poshuk_Vibirayemo = sS3
          End If
          If Regim = "вибираємо що в середині" And bl1 <> "" And bl2 <> "" Then
             sS0 = sS3
              sS0 = Mid(sS0, Len(bl1) +  1 )
              Poshuk_Vibirayemo = Left(sS0, Len(sS0) - Len(bl2))
          End If
          If Regim = "пропускаємо" Then
             Poshuk_Vibirayemo = sS2
          End If
        Else
             Poshuk_Vibirayemo = ""
        End If
End Function

Можете переделать как угодно чтоб управлять. Вот пример как она работает. Там есть несколько режимов...

1. ключ "вибираємо що в середині" - выбирает все что находится указано после первого тега и перед последним. Все теги указываются через запьятую (их может быть больше чем два), тогда понимаются как одна последовательность которую нужно найти
Код: plaintext
TmpWebNomStor = Poshuk_Vibirayemo(WebNomStor, "<UL class=paginator>,<BR><BR>", "вибираємо що в середині")
или тоже самое
Код: plaintext
If Poshuk_Vibirayemo(TmpWebNomStorRozdil, "<a,>", "вибираємо що в середині") <> "" Then 

2. "вибираємо все" - тоже что и п.№1 только включая первый и последний тег.

3. "пропускаємо" - находит всю цепочку тегов и передает переменной только все что после найденого, тоесть пропускает все найденое
Код: plaintext
TmpWebNomStor = Poshuk_Vibirayemo(TmpWebNomStor, "<li>," + Chr( 13 ) + Chr( 10 ), "пропускаємо")

так... чем бы это еще поделиться. Вот интересно, если есть упрощение, готовые, нафиг я тогда себе мозги парил?

Вот обычние поиски с защитой от Error
Код: plaintext
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.
Public Function ZnaytiVperedIObrizatiPisla(Vhid As String, Zrazok As String) As String
  Dim i2 As Long
   i2 = InStr( 1 , Vhid, Zrazok, vbTextCompare)
      If i2 <>  0  Then
        ZnaytiVperedIObrizatiPisla = Mid(Vhid, i2 + Len(Zrazok))
      Else
        ZnaytiVperedIObrizatiPisla = ""
      End If
End Function
Public Function ZnaytiVperedIObrizatiPislaREV(Vhid As String, Zrazok As String) As String
  Dim i2 As Long
   i2 = InStrRev(Vhid, Zrazok, - 1 , vbTextCompare)
      If i2 <>  0  Then
        ZnaytiVperedIObrizatiPislaREV = Mid(Vhid, i2 + Len(Zrazok))
      Else
        ZnaytiVperedIObrizatiPislaREV = ""
      End If
End Function

Public Function ZnaytiVperedIObrizatiDo(Vhid As String, Zrazok As String) As String
  Dim i2 As Long
   i2 = InStr( 1 , Vhid, Zrazok, vbTextCompare)
      If i2 <>  0  Then
        ZnaytiVperedIObrizatiDo = Left(Vhid, i2 -  1 )
      Else
        ZnaytiVperedIObrizatiDo = ""
      End If
End Function

Ну и пока хватит. Poshuk_Vibirayemo функция выбирает супер.

За Regex("to=(.*?)>") чтонебудь раскажите плиз. Спасибо.
с уважением Андрей
...
Рейтинг: 0 / 0
Регулярка
    #36351071
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От для проверки код в прямом окне...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
?Poshuk_Vibirayemo("<dsfghj><bd>asgdhjagshdjghdsa<br>dsfsdhfgjh<br>fsdgfhsdgfhgdshjf<KrutoBlin>OLE OLE OLE","<bd>,<Br>,<Kr","вибираємо що в середині")

?Poshuk_Vibirayemo("<dsfghj><bd>asgdhjagshdjghdsa<br>dsfsdhfgjh<br>fsdgfhsdgfhgdshjf<KrutoBlin>OLE OLE OLE","<bd>,<Br>,<Kr","пропускаємо")


?Poshuk_Vibirayemo("<dsfghj><bd>asgdhjagshdjghdsa<br>dsfsdhfgjh<br>fsdgfhsdgfhgdshjf<KrutoBlin>OLE OLE OLE","<bd>,<Br>,<Kr","вибираємо все")

?Poshuk_Vibirayemo("<dsfghj><bd>asgdhjagshdjghdsa<br>dsfsdhfgjh<br>fsdgfhsdgfhgdshjf<KrutoBlin>OLE OLE OLE","<bd>,LALALA,<Kr","вибираємо все")
...
Рейтинг: 0 / 0
Регулярка
    #36351527
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhenekПроблема в том, что он должен в результате выдать :

ololololo

а выдает

ololololo> и все что идет следом.У меня ровно та же регулярка выдает именно ololololo.
Весь код покажите.
...
Рейтинг: 0 / 0
Регулярка
    #36352509
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Регулярка
    #36353141
Zhenek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь код в первом посте.

Засовываем его в обработчик кнопки и все.
...
Рейтинг: 0 / 0
Регулярка
    #36354177
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhenekВесь код в первом посте.Вчера был не мой день :)
Я выполнял эту регулярку через VBScript.Regexp, видимо есть отличия от дотнетовского.
...
Рейтинг: 0 / 0
Регулярка
    #36354209
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Искомое значение находится в m.Item(i).Groups(1).Value
Item.Value это вся подстрока, попадающая под шаблон. Значения из скобок находятся в группах.

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


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