Название вроде говорит само за себя.У меня есть текстовый файл (НЕ файл perl), который содержит любое количество заполнителей в нескольких строках и, возможно, несколько в одной строке.Вот пример:
Здравствуйте, $ {first} $ {last}, пожалуйста, посетите нас по адресу http://${host}${context} и обратите внимание на \ $ {variable}.
Мне нужнозаменить все, что похоже на ${...}
, но не то, что выглядит \${...}
.Поэтому этот пример необходимо преобразовать в:
Здравствуйте, Джон Доу, пожалуйста, посетите нас по адресу http://example.com/foobar и обратите внимание на \ $ {variable}.
MyВ настоящее время выражение выглядит так:
s/([^\\])\$\{\s*([^\}\s]+)\s*\}/$1 . _lookupVar( $2, $varMap )/ge
, где _lookupVar
- это функция, которая знает, как вставить правильное значение.У меня есть первый [^\\]
, чтобы избежать замены последовательностей \${...}
, но это означает, что для ${host}${context}
заменяется только ${host}
.И по разным причинам я не могу действительно превратить ${host}${context}
в ${host} ${context}
.
Я могу что-то взломать, но мне было интересно, не скучаю ли я по некоторой магии регулярных выражений, которой кто-то знающий мог бы научить меня; -)