Я пишу интерпретатор языка в PowerShell (язык PILOT, для тех, кто может быть заинтересован), и я дошел до того, что я реализую замену переменных.Имя переменной состоит из $
или #
, за которым следует до десяти символов в наборе [A-Za-z0-9]
.Однако если перед именем переменной стоит \
, ее следует заменить , а не .Насколько я могу судить, шаблон, который я ищу, соответствует [^\\][\$#]\w{,10}
, но я не совсем понимаю, как сохранить результат соответствия в переменной PowerShell, чтобы я мог найти имя переменной втаблицу, чтобы заменить его значением.
Например, если переменная powershell $expr
содержит строку \#Foo has the value #Foo
, а $vartable["#Foo"]
содержит значение 5
, мне нужно будет захватить #Foo
- только второй - в $ varname, а затем выполнить замену захваченного #Foo
на $ vartable [$ varname] - $expr -replace "[^\\][\$#]\w{,10}",$vartable[$varname]
должно дать \#Foo has the value 5
.
Правильно ли я рассчитал шаблони как мне зафиксировать совпадение?
(Должен заметить, что я разрабатываю это с PowerShell 5.1, но ожидаю, что он сможет работать в этой версии или что-то еще позже, включая PSCore на не-Windowsоперационки.)