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 ="^абв"    
Result = objRegExp.Replace(TempStr, "ЗАМЕНА")  

На выходе:
ЗАМЕНА 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">

Поделиться

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

Поделиться

10

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

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

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

\s - пробельный символ.
\S - непробельный символ.

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

visualprogs.ru/all/4.html

Поделиться

11

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

Вот хочу удалять несколько (N) повторяющихся символов.
Регулярка находит от 1 до 3 вхождений "х":

<p>x{1,3}123

корректно отработала на строке
<p>xxxxx123укеукеукеуке123<p>xxx123123<p>123

Хочу удалять 1-10 пробелов между тегом p и табуляцией
objRegExp.Pattern ={<p>}&Chr(32){1,5}&Chr(160)&Chr(160)&Chr(160)&Chr(160)  '   ? - Ленивый режим
mytext$= objRegExp.Replace(mytext$, {<p>}&Chr(160)&Chr(160)&Chr(160)&Chr(160) )

Поделиться