1

Тема: Регулярные выражения и лотус. Объект VBScript.RegExp

Вот примеры.

$    - конец входной строки

Sub Click(Source As Button)
    Dim TempStr As String    
    Dim objRegExp As Variant    
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True '  проверять по всему тексту
    objRegExp.Multiline = True ' обрабатывать много строк
    
    TempStr = "абв 123 абв"    
    Print TempStr 'исходная строка
    objRegExp.Pattern ="абв$"
    Result = objRegExp.Replace(TempStr, "ЗАМЕНА")    
    Print Result
End Sub

На выходе:
абв 123 ЗАМЕНА


^    - начало входной строки

TempStr = "абв 123 абв"
objRegExp.Pattern ="^абв"    

На выходе:
ЗАМЕНА 123 абв

Поделиться

2

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

* -  находит 0 или много вхождений символа перед *

TempStr = "длинношеееееееее123"    
objRegExp.Pattern ="длинноше*"

На выходе:
ЗАМЕНА123

Поделиться

3

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

? - Прожорливость.

0+ - ни одного или один символ, стоящий перед "+"

TempStr = "длин000111000абв"
objRegExp.Pattern ="0+"

На выходе:
длинЗАМЕНА111ЗАМЕНАабв


0+?

TempStr = "длин000111000абв"
objRegExp.Pattern ="0+?"

На выходе:
длинЗАМЕНАЗАМЕНАЗАМЕНА111ЗАМЕНАЗАМЕНАЗАМЕНАабв

Поделиться

4

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

[\s\S] - любой символ

(?=шаблон)

TempStr = {длин0Я01110ЯЯЯЯ0абв <p class=MsoNormal style="margin-bottom:0cm;marg> <b}
objRegExp.Pattern ="class=(?=MsoNormal)"

Выход:
длин0Я01110ЯЯЯЯ0абв <p ЗАМЕНАMsoNormal style="margin-bottom:0cm;margin-bottom:.0001pt;text-align:  justify;line-height:normal">


[abc] - Находит любой из указанных символов.
[^abc] - Находит любой из неуказанных символов.

[a-z]  Находит любой символ из диапазона.
[^a-z]   Находит любой символ, не входящий в диапазон.

\s - пробельный символ. Эквивалентно [\f\n\r\t\v].
\S - непробельный символ.

. - любой одиночный символ
* - ни одного или несколько символов, стоящих перед ним
+ определяет один или более символов.

visualprogs.ru/all/4.html

Поделиться

5

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

<\/?(div|span|i|o:|b|u|a)[\s]?[\s\S]*?>   - заменяет все указанные теги

Поделиться

6

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

Хочу удалить тег class=MsoNormal. Вариант 1 - жадно удаляет, второй - как надо.

TempStr = {абв <p class=MsoNormal style="margin-bottom:0cm;margin-bottom:.0001pt;text-align:  justify;line-height:normal"> дсв}
objRegExp.Pattern ={class(.*)mal}

Выход:
абв <p ЗАМЕНА"> дсв


TempStr = {абв <p class=MsoNormal style="margin-bottom:0cm;margin-bottom:.0001pt;text-align:  justify;line-height:normal"> дсв}
objRegExp.Pattern ={class(.*?)mal}

Выход:
абв <p ЗАМЕНА style="margin-bottom:0cm;margin-bottom:.0001pt;text-align:  justify;line-height:normal"> дсв

Поделиться

7

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

Удаляем все строки типа "class=MsoTableGrid",  "class=MsoNormal" из строк типа
<p class=MsoNormal style="margin-bottom:0cm;margin-b
В скрипте:
objRegExp.Pattern ={class(.*?) }

Поделиться

8

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

Важная вешь про жадные и нежадные операторы!
Добавляя ? перед оператором, оператор превращается из жадного в не жадный.
Примеры:

1.

TempStr = {   </td> </tr></table><p class=MsoNormal></p></div>}
objRegExp.Pattern ={class=[\S]+[b]?[/b]\>}
Result = objRegExp.Replace(TempStr, "clas1")    

Результат:
</td> </tr></table><p class1</p></div>

2.

TempStr = {   </td> </tr></table><p class=MsoNormal></p></div>}
objRegExp.Pattern ={class=[\S]+\>}
Result = objRegExp.Replace(TempStr, "clas1")    

Результат:
</td> </tr></table><p class1

Поделиться

9

Re: Регулярные выражения и лотус. Объект VBScript.RegExp

Вот еще одна модификация скрипта для тестирования objRegExp.Replace

Sub Click(Source As Button)
    Dim TempStr As String    
    Dim objRegExp As Variant    
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Global = True '  проверять по всему тексту
    objRegExp.Multiline = True ' обрабатывать много строк
    TempStr = { 
<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
}
    Print TempStr 'исходная строка
    
    objRegExp.Pattern ={border=}
    TempStr = objRegExp.Replace(TempStr, {$&"})    
    
    objRegExp.Pattern ={border="([0-9])}
    TempStr = objRegExp.Replace(TempStr,  {$&"})    
    
    Msgbox TempStr
End Sub

Поделиться