Тема: VBScript: работа с "обрамляющими" конструкциями в рег. выражениях
Часто требуется извлечь из текста все вхождения, удовлетворяющие определённому шаблону. Например, извлечь все фрагменты, заключённые в угловые скобки:
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Global = True
Str = "<t1>a<t2>b<t3>"
objRegExp.Pattern = "<[\s\S]*>"
Set objMatches = objRegExp.Execute(Str)
For Each objMatch In objMatches
WScript.Echo objMatch.Value
Next
В данном примере конструкция [\s\S]* означает "любое количество любых символов".
Однако, результат может показаться немного неожиданным: возвращены будут вовсе не три фрагмента <t1>, <t2> и <t3> по отдельности, вся строка целиком как один фрагмент. Происходит это потому, что вся строка целиком, как ни странно, вполне удовлетворяет шаблону <[\s\S]*>. Такое поведение регулярных выражений называется "жадным", когда подходящим считается наиболее длинный фрагмент, удовлетворяющий шаблону. Чтобы сделать регулярное выражение "нежадным", в нашем шаблоне следует использовать знак вопроса после звёздочки:
<[\s\S]*?>
В этом случае три фрагмента <t1>, <t2> и <t3> будут возвращены по отдельности.
В названии ветки всегда должен быть указан язык программирования или среда исполнения скрипта, если это возможно.