Что нового

[RegExp] Вычисление внутри regexp при замене

iltmpz

Новичок
Сообщения
23
Репутация
0
Приветствую!

Вопрос в следующем: есть строка текста, в которой встречаются подстроки вида: "=XX", где XX - hex-код символа.
Надо эти подстроки заменить на символы с этими кодами.

Насколько я помню, в перловских регекспах был модификатор, говорящий о том, что при замене можно использовать $1 и применять к нему вычисления, а как в autoit?
Напрашивающееся решение было бы чем-то в этом роде:
StringRegExpReplace($str,"=([0-9A-F]{2})",Chr(Dec($1)))
Однако интерпретатор не понимает $1 в параметре replace.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
Local $in = "=41=55=54=4F=49=54"
Local $out = Execute("'" & StringRegExpReplace($in, "=([0-9A-F]{2})", "' & _test(""\1"") & '") & "'")
MsgBox(0, $in, $out)
Func _test($in)
	Return Chr(Dec($in))
EndFunc
 
Автор
I

iltmpz

Новичок
Сообщения
23
Репутация
0
Спасибо, хитрый прием.
Однако, на тестовом примере работает, на реальных данных - почему-то выдает пустую строку, не могу пока понять, почему...

Реальные данные это письмо в несколько десятков кб...
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Да, так работает, но это не оптимально. Нету в AutoIT такой возможности в регулярных выражений.

Найдите библиотеку encoding и функцию _Encoding_QuotedPrintableToANSI, кажется это то, что вам нужно.
 
Автор
I

iltmpz

Новичок
Сообщения
23
Репутация
0
inververs сказал(а):
функцию _Encoding_QuotedPrintableToANSI, кажется это то, что вам нужно.
Ух ты, спасибо, действительно работает! Ведь только вчера качал эту библиотеку, от функций глаза разбежались, не понял, что мне нужна именно _Encoding_QuotedPrintableToANSI и решил писать регексп.

Хотя, Ваш регексп уже приспособил: нашел тот кусок письма, который мне был нужен в данном частном случае (до 5 кбайт регексп работает отлично) и запустил.
 
Верх