Доброго времени суток, господа форумчане. Я решил переходить на .NET с vb6.0 и выбрал Visual Studio 2008 (весит меньше, а я на лимитке сижу), так вот мне требуется помощь с регуляркой ибо ими мне еще пользоваться не доводилось... Дело в том, что мне требуется спарсить кусочек сайта, а именно, все что находится в <div class="storycontent">, так я чего-то туплю не по детски.... Язык VB.NET. Заранее благодарю за помощь...
> Язык VB.NET. Это не важно. Надо выделить, что находится между тегами <div class="storycontent"> и </div> ?
Все просто, если точно известно, что там нет еще вложенных тегов <div></div>. Или по-другому - если нет </div> после контейнера
Там нет вложенных дивов, у нужного мне контейнера только закрывающий, ну и соответственно дальше идут другие контейнеры... 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>
Попробуй что-то типа такого: Code: <div class=\"storycontent\">(.+)<\/div>(<div.*>.*<\/div>)? Это с учетом "жадности" квантификаторов. Первое подвыражение - твое. Ну естественно надо флаги типа multiline поставить. Все равно хавает до последнего закрывающегося...
Жаль, но не выходит....так как кавычки он обрабатывает как выражение, то есть "storycontent" вызывает ошибку... Как их можно заменить? Может какой-либо спец символ?
Попробуй такой Code: <div class=\"storycontent\">(.*?)<\/div> Ха. В Qt через ж0пу - надо выставить "нежадность" для всего выражения. Работает, в общем.
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 Ошибка: Требуется запятая, ")" или допустимое продолжение выражения.
Странный код у тебя ) Попробуй такую ф-ю (проверить не могу - работает, или нет, на 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/
Незнаю как в VB но в C# должно помочь вот это: Code: <div class=\"storycontent\">(?<value>.*)</div> P.S Не проверял.
А по-моему из-за кавычек сама студия рассматривает это как конец строки. Попробуй так Code: <div class=""storycontent"">(.*?)<\/div>