Что нового

Проблема с раскрытием переменной в StringRegExpReplace

Latoid

Знающий
Сообщения
95
Репутация
11
Помогите пожалуйста. Туплю что-то.
Есть строка, записанная в переменную. Нужно найти в ней строки, содержащие подстроки что хранятся в отдельном массиве и заменить на что-то другое. Вот что написал:

Код:
#include <Array.au3>
$string = 'строка 1' &@CRLF& _
'строка 2' &@CRLF& _
'строка 3' &@CRLF& _
'граница 1' &@CRLF& _
'строка 4' &@CRLF& _
'строка 5' &@CRLF& _
'граница 2' &@CRLF& _
'строка 6' &@CRLF& _
'строка 7' &@CRLF& _
'граница 2-----------------------------' &@CRLF& _
'строка 8' &@CRLF& _
'строка 9' &@CRLF& _
'граница 2--' &@CRLF& _
'граница 1' &@CRLF& _
'строка 10' &@CRLF& _
'строка 11' &@CRLF& _
'граница 1' &@CRLF& _
'строка 12' &@CRLF& _
'строка 13' &@CRLF& _
'граница 1--'

Dim $aboundaries[2] = ["граница 1", "граница 2"] ; объявляем подстроки
;~ _ArrayDisplay ($aboundaries)
;~ ConsoleWrite ($string & @CRLF)
;~ ConsoleWrite ("________________" & @CRLF)

; Формируем шаблон
$pattern = "'"
For $y = 0 To UBound ($aboundaries) - 1
	$pattern &= $aboundaries[$y] & "-*|"
Next
$pattern = StringTrimRight ($pattern, 1)
$pattern &= "'"

ConsoleWrite ($pattern & @CRLF) ; с шаблоном всё в порядке, если скопировать вывод этой команды из консоли и вставить вместо $pattern в следующей команде, то всё отработает как надо
$string = StringRegExpReplace ($string, $pattern, 'ggg') ; :( не заменяет в таком виде, а так: $string = StringRegExpReplace ($string, 'граница 1-*|граница 2-*', 'ggg') - работает
ConsoleWrite ($string & @CRLF)


В-общем, похоже, переменная $pattern не раскрывается в предпоследней команде. Где ошибка?
На всякий случай - результат должен быть такой:
Код:
строка 1
строка 2
строка 3
ggg
строка 4
строка 5
ggg
строка 6
строка 7
ggg
строка 8
строка 9
ggg
ggg
строка 10
строка 11
ggg
строка 12
строка 13
ggg
 

amel27

Продвинутый
Сообщения
146
Репутация
55
кавычка в шаблоне зачем?

Код:
$pattern = ""
For $y = 0 To UBound ($aboundaries) - 1
    $pattern &= $aboundaries[$y] & "-*|"
Next
$pattern = StringTrimRight ($pattern, 1)
$pattern &= ""
 
Автор
L

Latoid

Знающий
Сообщения
95
Репутация
11
))) Полагал, что шаблон должен быть обрамлен кавычками обязательно.
Спасибо
 

r35p3ct

Продвинутый
Сообщения
228
Репутация
60
Это можно и так сделать...
Код:
$string = 'строка 1' &@CRLF& _
'строка 2' &@CRLF& _
'строка 3' &@CRLF& _
'граница 1' &@CRLF& _
'строка 4' &@CRLF& _
'строка 5' &@CRLF& _
'граница 2' &@CRLF& _
'строка 6' &@CRLF& _
'строка 7' &@CRLF& _
'граница 2-----------------------------' &@CRLF& _
'строка 8' &@CRLF& _
'строка 9' &@CRLF& _
'граница 2--' &@CRLF& _
'граница 1' &@CRLF& _
'строка 10' &@CRLF& _
'строка 11' &@CRLF& _
'граница 1' &@CRLF& _
'строка 12' &@CRLF& _
'строка 13' &@CRLF& _
'граница 1--'

$string = StringRegExpReplace ($string, 'граница.*', 'ggg')
ConsoleWrite ($string & @CRLF)
 
Автор
L

Latoid

Знающий
Сообщения
95
Репутация
11
Спасибо, но как понимаете, это всего лишь упрощенный пример. Я пишу парсер электронной почты (формат MIME), в нем разные части письма (собственно текст, аттачи) - это тексты, закодированные разными образами(base 64, utf, koi, etc). Отделяются части письма строками вида ------------050400050903070605020006 или ------------060702000808040304080207 или похожими. Так что так не пройдет - шаблон строк-разделителей должен формироваться для каждого письма отдельно
 
Верх