Я предлагаю использовать $([regex]::escape($myString))
внутри строкового литерала в двойных кавычках:
$myString="[test]"
$pattern = "^.*(?=/$([regex]::escape($myString))\s)"
Или, если вы не хотите беспокоиться о дополнительном экранировании, используйте обычную конкатенацию с использованием оператора +
:
$pattern = '^.*(?=/' + [regex]::escape($myString) +'\s)'
Получившийся $pattern
будет выглядеть как ^.*(?=/\[test]\s)
. Поскольку переменная $myString
является литеральной строкой, вам нужно экранировать все специальные метасимволы регулярных выражений (с [regex]::escape()
), которые могут быть внутри нее, чтобы механизм регулярных выражений интерпретировал ее как буквенные символы.
В вашем случае вы можете использовать
$s = '/docs/reports/test reports/document1.docx'
$myString="test"
$pattern = "^.*(?=/$([regex]::escape($myString))\s)"
$s -replace $pattern
Результат: /test reports/document1.docx