Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Регулярка / 10 сообщений из 10, страница 1 из 1
06.12.2009, 06:44
    #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
06.12.2009, 12:02
    #36350530
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярка
В первом случае вопросительный знак не нужен, но он ничего и не решает. Что именно не так в этом примере?

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

ololololo

а выдает

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

Пример :

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

&to=ololololo>БлабЛабла</a> а не ololololo
...
Рейтинг: 0 / 0
07.12.2009, 05:33
    #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
07.12.2009, 05:40
    #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
07.12.2009, 11:46
    #36351527
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Регулярка
ZhenekПроблема в том, что он должен в результате выдать :

ololololo

а выдает

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

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

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


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