Visual Basic. Программирование на Visual Basic

..........................................................................................................................

[ Главная ] [ Статьи ] [ Для новичков ] [ Примеры ] [ Программы ] [ Microsoft Agent 2.0 ] [ Пособие ] [ Уроки ] [ Разное ]
..........................................................................................................................

Регулярные выражения в VB (Visual Basic)

Что такое регулярные выражения (regular expressions)?

Регулярные выражения - это очень мощный механизм для обработки строк. С его помощью можно легко найти нужные части текста, проверить, удовлетворяет ли строка определённой маске, и т.д. и т.п. Такие выражения втроены во многие языки программирования, такие, как Perl, Php, JavaScript.

Что необходимо следать, чтобы такие выражения использовать в VB?

Для использования регулярных выражений в своих программах, необходимо подключить библиотеку Microsoft Windows Script. Такая библиотека поставляется с IE4 (и выше). Для подключения, зайдите в Project->References и поставьте флажок у VBScript Regular Expressions. Теперь к Visual Basic добавился объект RegExp, который содержит в себе все, что нужно для работы с регулярными выражениями.

Как использовать объект объект RegExp?

Для начала, необходимо объявить объектную переменную RegExp:

Dim myRegExp As New RegExp

Этот объект имеет следующие свойства и методы:

Свойства:

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  Global - если Global = True, то поиск ведётся во всей строке, если False, то только до первого совпадения.

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  IgnoreCase - игнорировать ли регистр символов при поиске.

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  Pattern - это свойство задаёт шаблон (маску) для поиска.

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  MultiLine - определяет, является ли текст многострочным или нет.

Методы:

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  Test - этот метод имеет следующий синтаксис:

Function Test(sourceString As String) As Boolean

Метод Test позволяет протестировать строку sourceString на соответствие её шаблону (Pattern). Возвращается Boolean, True - соответсвует, False - нет.

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  Execute - этот метод имеет следущий синтаксис:

Function Execute(sourceString As String) As MatchCollection

MatchCollection - это коллекция совпадений, которая содержит в себе всю информацию о всех совпадениях регулярного выражения в строке sourceString. Метод Execute может быть использован, например, для извлечения всех email адресов из строки sourceString.

Visual Basic - здесь можно почитать и скачать статьи, книги, примеры, описания к API функциям  Replace - этот метод имеет следующий синтаксис:

Function Replace(sourceString As String, replaceVar) _
As String

Метод Replace даёт возможность заменить все совпадения регулярного выражения строкой replaceVar.

Примеры использования регулярных выражений

Dim myRegExp As New RegExp ' создаём экземпляр RegExp'a
myRegExp.MultiLine = False ' текст однострочный
myRegExp.Global = True ' будем проходить всю строку
myRegExp.IgnoreCase = True ' игнорируем регистр символов
myRegExp.Pattern = "<BODY (.*)</BODY>" ' маска

Dim aMatch As Match ' один из совпавших образцов
Dim colMatches As MatchCollection ' коллекция этих образцов
Dim
testString As String ' тестируемая строка

testString = "<HTML><BODY bgcolor=#FFAABB>" & _
"<P>Это пример</P></BODY></HTML>" ' текст для теста

Set colMatches = myRegExp.Execute(testString) ' запускаем!

For Each aMatch In colMatches ' проходим по всей коллекции
    List1.AddItem aMatch.FirstIndex
    List1.AddItem aMatch.Length
    List1.AddItem aMatch.SubMatches(0)
    List1.AddItem aMatch.Value
Next aMatch

В результате выполнения такого кода в ListBox (List1) добавятся вот такие строчки:

Первая - число 6 (FirstIndex) - это номер первого совпавшего символа (т.е. симола b)

Вторая строка - 46 (Length) - длина совпавшего образца.

Третья строка:
"bgcolor=#FFAABB><P>Это пример</P>". Это первый совпавший образец (\1), т.е. текст, попавший в скобки (.*) в маске. Для \2 нужно смотреть SubMatches(1) и т.д.

И последняя строка:
"<BODY bgcolor=#FFAABB><P>Это пример</P></BODY>" - полный образец.

Теперь, давайте, к примеру, изменим маску (регулярное выражение) так, чтобы из текста получить hex цвет (#XXXXXX). Маска может выглядить так:

"(#[0-9A-F]{6})"

Запустите и посмотрите что будет. Свойство SubMatches(0) вернёт вам строку - "#FFAABB", т.е. как раз то, что мы искали. Кстати, свойство Value вернёт вам такую же строку.

Рассмотрим пример использования метода Test:

Dim myRegExp As New RegExp
myRegExp.MultiLine = False
myRegExp.Global = True
myRegExp.IgnoreCase = True
myRegExp.Pattern = "(#[0-9A-F]{6})"


testString = "<HTML><BODY bgcolor=#FFAABB>" & _
"<P>Это пример</P></BODY></HTML>"

If myRegExp.Test(testString) Then
    MsgBox "Совпала!"
Else
    MsgBox "Не совпала."
End If

Здесь мы проверяем, совпала ли строка с регулярным выражением или нет.

И наконец, последний пример. Давайте заменим текст, находящийся в тегах <P> на другой текст:

myRegExp.Pattern = "<P>(.*?)</P>"
testString = "<HTML><BODY bgcolor=#FFAABB>" & _
"<P>Это пример</P></BODY></HTML>"
List1.AddItem myRegExp.Replace(testString, _
"<P>Новый текст в теге P!</P>")

В данном случае в тестируемой строке будет только одна пара <P></P>. Но вы можете сами добавить ещё одну пару и проверить работоспособность кода.

Синтаксис регулярных выражений

Здесь я разместил очень краткое описание синтаксиса регулярных выражений, т.к. подробное описание заняло бы не один десяток страниц. На эту тему была выпущена книга "Mastering Regular Expressions". Более подробное описание вы можете найти на специализированных сайтах. (www.perl.com, к примеру).

Спец. символы:

Символ
Назначение
*

Множитель. Определяет ни одного или несколько символов, стоящих перед ним. Пример:

"ab*c" - символ a, затем ни одного или несколько символов b, и символ c.

.

Точка - любой одиночный символ, кроме символа новой строки. Например:

"a." - символ a, за который следует любой одиночный символ.

[]

Скобки использутся для задания класса символов. Например:

"[0-9A-F]" - соответствует одному hex символу. Заметьте, что 9-0 использовать нельзя! Символы должны идти обязательно по возрастающей.

[^]

Класс отрицания. Например:

"[^A-Z]" - соответствует любому символу, крому любой заглавной латинской буквы.

\w

Любой буквенно-циферный символ. Фактически аналог класса:

"[a-zA-Z0-9_]"

\W
Аналог "[^a-zA-Z0-9_]"
\d

Любая цифра: "[0-9]". Например

"\d\d\.\d\d\.\d\d\d\d" - соответствует дате. Заметьте, что перед точкой нужно поставить обратную косую черту \. Это говорит о том, что точку мы хотим интерпретировать именно как точку, а не как спец. символ - точку.

\D
Аналог "[^0-9_]". Т.е. всё, кроме цифр.
\s
Пробельный символ "[ \r\t\n\f]".
\S
Непробельный символ "[^ \r\t\n\f]".
+

Тоже множитель (как и *), но определяет один или более символов. Например:

"ab+c" - символ a, один или более символов b и затем символ c.

?

Прожорливость. Например, выше, для замены текста внутри тегов <p> мы использовали следующую маску: "<P>(.*?)</P>". После * мы поставили знак вопроса. Если бы мы этого не сделати, что произошла бы замена всего того, что находится от первого тега <p> до последнего </p>. А так, происходит замена только до следующего тега.

Ещё несколько примеров регулярных выражений:

"(два|три) богатыря"
соответствует как строке "два богатыря", так и "три богатыря".

".+@.+\..+" - соответствует email адресу.

"a(.)\1c" - соответствует одному символу a, затем любым 2-м одинаковым символам, и затем символу с. Т.е. совпадёт "axxc", то не "axyc".

"(\d\d)\.\1\.\d\d\d\d" - соответствует дате, у которой число и месяц одинаковы. Т.е. дата "09.09.2001" - подойдёт, а дата "09.12.2001" - нет. Ну и т.п.



..........................................................................................................................

[ Главная ] [ Диски ] [ Книги ] [ Архив рассылки ] [ Архив новостей ] [ Готовые кусочки программ ] [ Карта сайта ]
..........................................................................................................................

По страницам сайта Visaul Progs
или Изучение Visual Basic
Рассылка 'По страницам сайта Visaul Progs' >>> Подпишись на рассылку - будешь получать новые статьи , примеры и много полезной информации из первых рук!!! >>>Если у вас есть статья которой нет на сайте
пришлите ее мне-------->
Послать статью
>>>Если вы хотите задать вопрос
пишите-------->
Мне нужна помощь


Рейтинг сайтов YandeG Rambler's Top100
Реклама:

...:::Design by Mystf0rse 2005-2010 year:::...