Помогите с регулярками в VS 2008...

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by z0mbyak, 6 Aug 2010.

  1. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Доброго времени суток, господа форумчане.

    Я решил переходить на .NET с vb6.0 и выбрал Visual Studio 2008 (весит меньше, а я на лимитке сижу), так вот мне требуется помощь с регуляркой ибо ими мне еще пользоваться не доводилось...
    Дело в том, что мне требуется спарсить кусочек сайта, а именно, все что находится в <div class="storycontent">, так я чего-то туплю не по детски....
    Язык VB.NET.
    Заранее благодарю за помощь...
     
  2. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    > Язык VB.NET.
    Это не важно. Надо выделить, что находится между тегами <div class="storycontent"> и </div> ?
     
  3. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Да именно так.
     
  4. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Нужно содержимое контейнера вытянуть...
     
  5. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Все просто, если точно известно, что там нет еще вложенных тегов <div></div>. Или по-другому - если нет </div> после контейнера
     
  6. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Там нет вложенных дивов, у нужного мне контейнера только закрывающий, ну и соответственно дальше идут другие контейнеры...
    Code:
    <div class="meta">Автор:  | <a href=>Без рубрики</a> | 06 Авг 2010 15:00 </div> 
     
    	
     
    	<div class="storycontent"> 
     
    	[COLOR=Red]Это мне нужно вытянуть[/COLOR]
     
    	</div> 
     
    	
     
    	<div class="feedback"> 
     
                
                <span>Комментарии отключены</span> 
    	</div> 
     
    #6 z0mbyak, 6 Aug 2010
    Last edited: 6 Aug 2010
  7. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Попробуй что-то типа такого:
    Code:
    <div class=\"storycontent\">(.+)<\/div>(<div.*>.*<\/div>)?
    Это с учетом "жадности" квантификаторов. Первое подвыражение - твое. Ну естественно надо флаги типа multiline поставить.

    Все равно хавает до последнего закрывающегося...
     
    #7 keen6, 6 Aug 2010
    Last edited: 6 Aug 2010
    1 person likes this.
  8. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Жаль, но не выходит....так как кавычки он обрабатывает как выражение, то есть "storycontent" вызывает ошибку... Как их можно заменить? Может какой-либо спец символ?
     
  9. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    каквычки экранируются символом '\'
     
  10. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Попробуй такой
    Code:
    <div class=\"storycontent\">(.*?)<\/div>
    Ха. В Qt через ж0пу - надо выставить "нежадность" для всего выражения. Работает, в общем.
     
    #10 keen6, 6 Aug 2010
    Last edited: 6 Aug 2010
  11. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    То же самое.... ошибка...
    З.Ы. мой мозг срочно требует пива:)
     
  12. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Покаж код ) И ошибку тоже.
     
  13. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Code:
     Dim ClienT As New System.Net.WebClient
            Dim data As String = ClienT.DownloadString("http://*******")
            Dim t2find As New System.Text.RegularExpressions.Regex("<div class=\"storycontent\">(.*?)<\/div>")
            Dim result As String = тут хз ща думаю как лучше сделать....
            TextBox1.Text = result
    Ошибка: Требуется запятая, ")" или допустимое продолжение выражения.
     
    #13 z0mbyak, 6 Aug 2010
    Last edited: 6 Aug 2010
  14. keen6

    keen6 New Member

    Joined:
    7 Apr 2010
    Messages:
    46
    Likes Received:
    4
    Reputations:
    0
    Странный код у тебя ) Попробуй такую ф-ю (проверить не могу - работает, или нет, на VB не кодю )

    Code:
    Function TestRegExp(myPattern As String, myString As String)
       'Create objects.
       Dim objRegExp As RegExp
       Dim objMatch As Match
       Dim colMatches   As MatchCollection
       Dim RetStr As String
       
       ' Create a regular expression object.
       Set objRegExp = New RegExp
    
       'Set the pattern by using the Pattern property.
       objRegExp.Pattern = myPattern
    
       ' Set Case Insensitivity.
       objRegExp.IgnoreCase = True
    
       'Set global applicability.
       objRegExp.Global = True
    
       'Test whether the String can be compared.
       If (objRegExp.Test(myString) = True) Then
    
       'Get the matches.
        Set colMatches = objRegExp.Execute(myString)   ' Execute search.
    
        For Each objMatch In colMatches   ' Iterate Matches collection.
          RetStr =  objMatch.Value; 
        Next
       Else
        RetStr = "String Matching Failed"
       End If
       TestRegExp = RetStr
    End Function
    В общем ,регулярка рабочая, надо просто курить как у вас работают с подвыражениями: http://www.devarticles.com/c/a/VB.Net/Regular-Expressions-in-.NET/1/
     
    #14 keen6, 6 Aug 2010
    Last edited: 6 Aug 2010
    1 person likes this.
  15. CodeSender:)

    CodeSender:) Active Member

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Незнаю как в VB но в C# должно помочь вот это:
    Code:
    <div class=\"storycontent\">(?<value>.*)</div>
    P.S Не проверял.
     
    2 people like this.
  16. z0mbyak

    z0mbyak Active Member

    Joined:
    10 Apr 2010
    Messages:
    536
    Likes Received:
    200
    Reputations:
    293
    Синтаксис переправлю и проверю...а так вроде должно работать...
     
  17. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    А по-моему из-за кавычек сама студия рассматривает это как конец строки. Попробуй так
    Code:
    <div class=""storycontent"">(.*?)<\/div>
     
  18. CodeSender:)

    CodeSender:) Active Member

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Нет, студия верно обрабатывает \"\".
     
  19. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    А так?
    <div class=\"storycontent\">(.*?)</div>
     
  20. CodeSender:)

    CodeSender:) Active Member

    Joined:
    29 Jul 2010
    Messages:
    245
    Likes Received:
    115
    Reputations:
    23
    Я выше показал верный регексп.